[erro ao carregar imagem]

8 respostas
ken420

Erro

Exception in thread "main" java.lang.NullPointerException
        at javax.swing.ImageIcon.<init>(ImageIcon.java:167)
        at br.com.Index.TelaPrincipal.<init>(TelaPrincipal.java:77)
        at br.com.Index.TelaPrincipal.main(TelaPrincipal.java:172)
Java Result: 1

Codigo

//Image de fundo
        imagem = new ImageIcon(getClass().getResource("C:/imagem/mickey.JPG"));
        seuPanel = new JPanel(){
            protected void paintComponent( Graphics g ){
                    super.paintComponent(g);
                    imagem.paintIcon(this,g,20,20);
        }
};

8 Respostas

ken420
//Imagem
ImageIcon img = new ImageIcon("C:/imagem/mickey.jpg");
JLabel lbl = new JLabel(img);
lbl.setBounds(200,200,100,100);

tentei isso tambem e nada!

Andre_Brito

Opa.

Troca a barra ("") por duas barras ("\") no path da imagem.

Abraço.

[editado]
Seu Windows usa a barra “/” para o path da imagem??? Oloco…

[/editado]

Marky.Vasconcelos

Normal… usar / no path também funciona…
Mas… tente deixar de usar o ImageIcon desse modo… use a BufferedImage

BufferedImage imagem = ImageIO.read(new File("C:/imagem/mickey.JPG"));   
seuPanel = new JPanel(){   
    protected void paintComponent( Graphics g ){   
            super.paintComponent(g);   
            Graphics2D g2d = (Graphics2D) g.create();
            g2d.drawImage(imagem, 20,20,this);
            g2d.dispose();
}
Andre_Brito

Opa.

Mark, por que usar BufferedImage se ele vai usar a imagem só como apresentação e não vai fazer operações sobre ela? Se ainda quiser usar ImageIcon, toma:
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.ImageIcon;

public class T {
	public static void main(String[] args) {
		JFrame frame = new JFrame("Frame com imagem");
		ImageIcon imagem = new ImageIcon("C:\Documents and Settings\asd.jpg");
		JLabel label = new JLabel(imagem);

		frame.getContentPane().add(label);
		frame.setSize(500, 500);
		frame.setVisible(true);
	}
}

Abraço.

M

Quando se usa:

getClass().getResource("algumaCoisaAqui")

O caminho do arquivo a ser carregado deve iniciar com ‘/’ indicando que o local em que a imagem está é relativa ao diretório do projeto.

Sua aplicação funcionará? SIm. No seu computador. Se transferido para outro sem a imagem na mesma pasta (ou ainda para outro sistema operacional) não vai prestar…

Procure manter todas as dependências do projeto dentro dele. Se você usa imagens, por exemplo, crie uma estrutura similar a essa:

Projeto
|___src
|      |___images
|             |___mickey.jpg*
|      |___Classes
|___lib**
  • Lembre-se das maiúsculas e minúsculas: o Windows é um dos poucos SO’s que não são case sensitive na estrutura de arquivos.
    ** A pasta lib existe apenas se houverem dependências de outras APIs ou frameworks que serão exportados com seu projeto.

Seguir essa idéia permite portabilidade. Se você tivesse uma estrutura assim, bastaria usar no código:

imagem = new ImageIcon(getClass().getResource("/images/mickey.jpg"));
Marky.Vasconcelos

Andre Brito:
Opa.

Mark, por que usar BufferedImage se ele vai usar a imagem só como apresentação e não vai fazer operações sobre ela?

Não é por que ele vai usar só como apresentação que ele precisa usar o ImageIcon… E com BufferedImage voce tem a possibilidade de extendela como bem quiser… girar…cortar… E essas operações são bem comuns…

E em alguns programas meus eu uso a BufferedImage só como apresentação mesmo e não tem nenhum problema.

ken420

Consegui carregar a minha imagem na tela

ImageIcon img = new ImageIcon("C:/imagem/mickey2.jpg");
        JLabel lbl = new JLabel(img);
        lbl.setBounds(0,0,1024,768);

agora fiquei em uma otra dúvida, para mim atribuir mais eventos em minha imagem ai sim teria que usar no caso BufferedImage ?

Marky.Vasconcelos

Como assim atribuir eventos?

Criado 14 de janeiro de 2009
Ultima resposta 15 de jan. de 2009
Respostas 8
Participantes 4