Eu direto uso imagens nos meus programas, salvo o .jar e elas não “desaparecem”. E não faço nada de complicado para dar certo.
Considere um Projeto simples no NetBeans, de forma que eu tenha um Pacote chamado “Codigos”, e nele estejam minhas classes que estão “chamando” essas imagens.
Suponha que eu tenha um Botão e nele tenha uma imagem:
btabrir = new JButton("Abrir", new ImageIcon(getClass().getResource("/img/abrir.png")));
Para que essa imagem “abrir.png” apareça no .jar, basta eu criar um novo Pacote “ao lado” desse “Codigos”. Esse pacote eu coloco o nome de “img”. E dentro dele solte as imagens.
Logo, quando a linha de codigo acima chamar a imagem, ela buscará esse pacote “img” (pois eu coloquei ‘img’ lá na linha de código).
Feito isso, ainda estamos no PROJETO. No NetBeans, Clique no menu “Executar”, e clique em “Limpar e Construir projeto principal”. Pronto! Suas imagens estarão embutidas nesse .jar gerado!
P.S.: Verifique direitinho se o diretorio na linha de código está batendo com o diretório do Projeto. E esse exemplo que estou te falando FUNCIONA! Acabei de testar aqui, inclusive levando o .jar para outro PC.
Enfrentei esse mesmo problema, e quando fui ver era porque eu tinha salvo o arquivo como “logo.PNG” no package e eu estava settando o ícone como você descreveu…
Aí, dentro da IDE, dava tudo certo, e quando exportava o Jar não aparecia pois apresentava erro durante sua execução.
Bem, verifiquei porque esse erro era por causa da extensão que no package estava [b].PNG/b e no ImageIcon estava [b].png/b.
Então, bastou colocar a extensão do ImageIcon como .PNG
Certifique-se que as letras maiúsculas/minúsculas são idênticas. Isso não faz diferença para o Windows, mas faz para o .jar.
Além disso, também se certifique que o caminho começa com / e que a pasta está dentro do seu classpath (ou seja, seria uma pasta onde você poderia colocar código fonte).
Finalmente, retire o espaço em branco que tem depois do nome de todos os seus arquivos. Esse espaço está antes de você fechar aspas.
Retirei os espaços, e você dizer sobre ser uma pasta que poderia colocar código fonte fez eu lembrar que tinha feito uma “Pasta” para as imgs, e nao um “Pacote” ‘-’
Obrigado pela ajuda e pelo gatilho ViniGodoy. E eduJava, nao precisei fazer isso, só era mudar o tipo de pasta mesmo ^^