Erro NullPointerException - Como resolver?

9 respostas
A

Estou tentando colocar uma imagem em um botão da minha barra de ferramentas mas, quando vou executar o projeto aparece o seguinte erro:

Exception in thread main java.lang.NullPointerException

at javax.swing.ImageIcon.<init>(Unknown Source)

at Telas.MDI.<init>(MDI.java:14)

at Telas.MDI.main(MDI.java:64)

Alguem poderia me ajudar?

Segue o meu código para facilitar:

package Telas;

import java.awt.*;
import javax.swing.*;

public class MDI extends JFrame{
	private JDesktopPane theDesktop;
	JButton b1;
	
    public MDI(){
    	super("Tela JToolBar");
    	b1 = new JButton();
    	
    	b1.setIcon(new ImageIcon(getClass().getResource("C:/Documents and Settings/acpferre/Desktop/Encadernadora/Encadernadora/src/casinha.ico")));
    	
    	// barra de ferramentas   
    	JToolBar barraFerramentas = new JToolBar();   
    	       
    	//adiciona os menus na barra de ferramentas   
    	// b1 no caso é o botão   
    	barraFerramentas.add(b1);   
    	  
    	// definição do layout   
    	barraFerramentas.setLayout (new BorderLayout());   
    	     
    	// adiciona objetos     
    	add(barraFerramentas, BorderLayout.NORTH); 	  
    	
    	
    	
    	
    	theDesktop = new JDesktopPane();
    	JFrame.setDefaultLookAndFeelDecorated(true);
    	getContentPane().add(theDesktop);
    	setVisible(true);   
        setExtendedState(MAXIMIZED_BOTH);
    }
    
    public static void main(String args[]) 
	{
		MDI application = new MDI();
		application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

9 Respostas

M

cara, ele não ta achando a imagem… adiciona uma verificação para ver se existe…

ajfilho

Tá dando nullPointerException porque não está encontrando a imagem no caminho correto.

Encadernadora é o teu projeto certo?

MDI é tua classe que tá dentro de src, certo?

A imagem pelo que estou vendo está dentro de src também, então não precisa passar o caminho todo, coloca só isso:

b1.setIcon(new ImageIcon(getClass().getResource("casinha.ico")));

Abraços!

C

dentro da pasta do teu projeto crie uma pasta “imagens” e jogue todas as imagens q vc quer lá, depois segue a dica do ajfilho. :wink:

b1.setIcon(new ImageIcon(getClass().getResource("imagens/casinha.ico")));
A

Eu fiz o que o ajfilho disse não adiantou nada. Continua dando erro!!!

ajfilho

escreve isso no método main e vê o que sai:

System.out.println(MDI.class.getResource(""));

ou isso:

System.out.println(getClass().getResource(""));
A

saiu isso:
file:/C:/Documents%20and%20Settings/acpferre/Desktop/Encadernadora/Encadernadora/bin/Telas/

C

eu acho q o problema pode estar no Documents and Settings, tente colocar o projeto direto no C: da máquina 8)
tipo:

C:/Encadernadora

e as imagens dentro do projeto e acesse direto

A

cabelograff até que executou, a tela apareceu mas, tive que colocar a pasta images dentro da pasta bin…
Só que agora a minha toolbar aparece bem fininha na parte superior sem nenhum botão ou imagem…
Segue o código:

package Telas;

import java.awt.*;
import javax.swing.*;

public class MDI extends JFrame{
	private JDesktopPane theDesktop;
	JButton b1;
	
    public MDI(){
    	super("Tela JToolBar");
    	b1 = new JButton();
    	b1.setIcon(new ImageIcon(getClass().getResource("images/casinha.ico")));
    	
    	// barra de ferramentas   
    	JToolBar barraFerramentas = new JToolBar();   
    	       
    	//adiciona os menus na barra de ferramentas   
    	// b1 no caso é o botão   
    	barraFerramentas.add(b1);   
    	  
    	// definição do layout   
    	barraFerramentas.setLayout (new BorderLayout());   
    	     
    	// adiciona objetos     
    	add(barraFerramentas, BorderLayout.NORTH); 	  
    	
    	
    	theDesktop = new JDesktopPane();
    	JFrame.setDefaultLookAndFeelDecorated(true);
    	getContentPane().add(theDesktop);
    	setVisible(true);   
        setExtendedState(MAXIMIZED_BOTH);
    }
    
    public static void main(String args[]) 
	{
    	System.out.println(MDI.class.getResource(""));
		MDI application = new MDI();
		
		application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

obrigada pela ajuda ate o momento

M

Se você olhar bem a documentação da API (http://java.sun.com/javase/6/docs/api/java/lang/ClassLoader.html#getResource(java.lang.String)) verá a seguinte frase:

Ou seja, o nome do recurso (no caso o arquivo de imagem) deve começar com uma barra. Tente fazer o seguinte:

b1.setIcon(new ImageIcon(getClass().getResource("/casinha.ico")));
Criado 29 de janeiro de 2009
Ultima resposta 29 de jan. de 2009
Respostas 9
Participantes 5