Carregar imagem de JLabel, arquivo jar [ RESOLVIDO ]

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:

[code]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) {
		
}	

}[/code]

Muito obrigado pela atenção.

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

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

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

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.

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.