Carregar imagem de JLabel, arquivo jar [ RESOLVIDO ]

4 respostas
BeR

Ola galera GUJ.

Bom gente, meu problema é bastante comum, eu li muitos tópicos relacionado ao assunto antes de resolver escrever esse aqui, alguns são bastante semelhantes ao meu, mas a solução que sugeriram não me ajudou.

Então vamos ao problema: No Eclipse eu criei um JLabel e adicionei uma imagem a ele com a intenção que o JLabel fosse a imagem de fundo do meu programa. Para uso apenas no Eclipse eu uso o codigo:
labelImagem = new JLabel(new ImageIcon("E:\Java\workspace\semNome\src\imagens\science1.jpg"));
mas agora eu quero gerar um arquivo jar, e como vocês bem sabem esse código não é o ideal. Lendo outros tópicos cheguei a conclusão que é necessário usar um código assim:
getClass().getClassLoader().getResource("science1.jpg")
ou
getClass().getClassLoader().getResourceAsStream("science1.jpg");
Já tentei usar os dois, porem sem sucesso. Consigo gerar o jar perfeitamente com o Eclipse. Estrutura de pastas: workspace/semNome/src/imagens/science1.jpg

Como faço para meu arquivo jar carregar a imagem de fundo do JLabel corretamente?

meu código:
public class GUJ extends JFrame implements ActionListener {
	private JPanel painel;
	private JLabel labelImagem;
	
	public GUJ() {
		tela();
	}

	public static void main(String[] args) {
		new GUJ();
	}

	public void tela(){
//		"E:\Java\workspace\semNome\src\imagens\science1.jpg"
//		"/semNome/src/imagens/science1.jpg"
//		getClass().getClassLoader().getResource("science1.jpg")
//		getClass().getClassLoader().getResourceAsStream("science1.jpg");
		painel = new JPanel();
		labelImagem = new JLabel(new ImageIcon("E:\Java\workspace\semNome\src\imagens\science1.jpg"));		
		
		painel.setLayout(null);
		painel.add(labelImagem);		
		labelImagem.setBounds(1, 1, 300, 300);
				
		
		this.pack();
		this.getContentPane().add(painel);
		this.setSize(308, 330);
		Dimension tamanhoTela = Toolkit.getDefaultToolkit().getScreenSize();
		this.setLocation((tamanhoTela.width - this.getWidth()) / 2,
				(tamanhoTela.height - this.getHeight()) / 2);
		this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
		this.setVisible(true);
	}
	public void actionPerformed(ActionEvent arg0) {
			
	}	
}
Muito obrigado pela atenção.

4 Respostas

Eric_Yuzo

Como sua imagem está dentro do pacote imagens, passe o caminho da imagem incluindo os pacotes:

getClass().getClassLoader().getResource("/imagens/science1.jpg")
BeR

como o método getResouces() devolve uma URL testei assim:

labelImagem = new JLabel(new ImageIcon(getClass().getClassLoader().getResource("/imagens/science1.jpg")));

mas como todas as outras tentativas, o erro persiste: nullPointerException.
eu não consigo entender por que ele não esta achando a imagem.

obrigado pela atenção

Eric_Yuzo

Copiei o código que tinha postado e acabei nem percebendo, mas o getClassLoader não é necessário. Eu sempre faço assim:

new ImageIcon(getClass().getResource("/imagens/science1.jpg"))

O NullPointerException deve ocorrer por não estar encontrando a imagem. Na maioria das vezes (quando o nome não está errado, claro), este erro ocorre por causa de letras minúsculas no lugar de maiúsculas. Até a extensão afeta neste caso, por exemplo, se o arquivo se chamar “science1.JPG”, o arquivo já não seria encontrado. Verifique se este não é o seu caso.

BeR

Caro Eric muito obrigado, a sua solução resolveu o meu problema.

Uma coisa interessante que percebi:

labelImagem = new JLabel(new ImageIcon(getClass().getClassLoader().getResource("imagens/science1.jpg"))); labelImagem = new JLabel(new ImageIcon(getClass().getResource("/imagens/science1.jpg")));
essas duas linhas funcionam, mas note que a 01 esta sem a “/” inicial. Por causa da bendita fiquei uma semana com insônia…=(

Valeu mesmo Eric.

Criado 16 de janeiro de 2011
Ultima resposta 16 de jan. de 2011
Respostas 4
Participantes 2