Tenho uma classe de interface gráfica que contém uma imagem, estou colocando ela através deste comando:
jLabel1.setIcon(newjavax.swing.ImageIcon("C:\\Documents and Settings\\caio\\Desktop\\logo.JPG"));
a imagem aparece certinho, mas pelo que eu vi ela é carregada em tempo de execução, pois se eu tirá-la do diretório que setei no comando ela não aparece mais.
Gostaria de saber como faço pra que a imagem fique integrada ao programa sem que seja buscada em tempo de execução
mas quando eu gero o jar a imagem não aparece :x
(obs: estou usando o Eclipse)
M
Marky.Vasconcelos
Para o jar voce nao vai usar o caminho relativo. Voce tme que pegar com o getResource do ClassLoader.
S
sheldon
[b]Sim. realmente vc precisa usar um get Resource. Pra resumir o negocio siga estes passos:
[color=red]1-> [/color]Coloque a imagem na raiz do seu projeto, seria mais ou menos: SEU_PROJETO/src/
[color=red]2->[/color] Para carregar a imagem tente usar o getResource…[/b]
ImageIcon logo = new ImageIcon(this.getClass().getResource("/imagem.jpg"));
JLabel Label1 = new JLabel(logo);
quando vc fizer o jar, abra-o, num descompactador qualquer, e verifique se a imagem fica logo no raiz do jar… aíii funciona certim.
[color=red]
PS:[/color] Observe que o nome da imagem na pasta tem q ser rigorosamente identico ao nome que vc colocar no getResource Ex: ( img.JPG != img.jpg )
C
CaioMelqui
Consegui!
Muito Obrigado pela ajuda pessoal!!
M
Marky.Vasconcelos
sheldon:
… rigorosamente identico ao nome que vc colocar no getResource
Isso quer dizer. Ele é case-sensitive.
C
CaioMelqui
ixi, hoje fui gerar um novo jar e vi que ainda ta dando erro
quando uso o código anterior a imagem aparece se rodar no Eclipse, mas quando gero o jar não:
quando uso o this.getClass().getResource() da erro de NullPointerException:
ImageIcon logo = new javax.swing.ImageIcon(this.getClass().getResource("imagem\\logo.jpg"));
jLabel1 = new JLabel(logo);
o erro exato retornado é esse:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(ImageIcon.java:187)
at util.TelaBuscaProcessoCompra.initComponents(TelaBuscaProcessoCompra.java:67)
at util.TelaBuscaProcessoCompra.<init>(TelaBuscaProcessoCompra.java:25)
at util.TelaBuscaProcessoCompra$2.run(TelaBuscaProcessoCompra.java:193)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:235)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:602)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)
C
CaioMelqui
alguém sabe como posso resolver isso?
pesquisei bastante no google e vi que esse comando this.getClass().getResource() resolve o problema de todo mundo que quer colocar uma imagem na tela, exceto o meu. Não faço a mínima idéia do motivo desse erro de nullpointerexception, afinal, o caminho que usei funcionou quando não tava colocando o this.getClass().getResource(). Só pra testar, coloquei este comando:
ImageIcon logo = new javax.swing.ImageIcon(this.getClass().getResource(""));
jLabel1 = new JLabel(logo);
e o programa rodou sem apresentar exception, mas claro que não apareceu a imagem
C
CaioMelqui
alguém pode me ajudar?
V
ViniGodoy
Primeiro de tudo, o getResource é diferente de se usar o comando seu o getResource.
O getResource procura no seu classpath, e exige que o nome da imagem seja absolutamente idêntico (inclusive nas maiúsculas e minúsculas) ao nome da imagem.
Faça assim:
E certifique-se que a imagem está na pasta imagem, que está localizada juntamente as outras classes do seu código fonte.
C
CaioMelqui
este é o diretório do meu projeto onde criei a pasta imagem:
e aqui o conteúdo da pasta imagem, com o arquivo logo.jpg:
só pra ficar claro, coloco de novo o código que tá dando NullPointerException:
logo = new javax.swing.ImageIcon(this.getClass().getResource("imagem/logo.jpg"));
alguma idéia do que pode estar causando a Exception?
V
ViniGodoy
Sim, como já foi falado umas 3 vezes… mova sua pasta imagem para dentro da pasta “src”.
Para o getResource, a pasta em questão deve estar dentro do seu classpath.
Se você ler a documentação do getResource() vai ver que ele retorna null, caso o recurso apontado não seja encontrado.
Se você ler a documentação do ImageIcon vai ver que ele lança uma NullPointerException, se a imagem fornecida for nula.
Fica para você a tarefa de ligar A com B.
C
CaioMelqui
agora sim realmente consegui!!
foi mal se incomodei muito, é que pelo que eu tinha entendido da explicação do pessoal, eu simplesmente teria que criar uma pasta junto do meu código fonte, mas com sua explicação no último post, eu vi que tinha que criar um pacote no eclipse, e jogar a imagem lá dentro. Fica aí a dica pra quem tiver um problema semelhante.
obrigado a ajuda de todos.