Olá galera blz? Peço a ajuda de vocês: não consigo ler uma imagem de dentro de um jar. Rodando pela IDE Funciona blz, mas no jar executavel não.
Já li vários posts sobre esse caso mas ainda não consegui resolver… desse posts, vejo que tenho que usar o tal método getResourceAsStream mas não sei utilizar, já que ele retorna um InputStream que eu não faço idéia do que fazer com ele.
Ai vai um exemplo de código…
setIconImage(new ImageIcon(getClass().getResource("/imagen/forca00.jpg")).getImage());
verifique também se o caminho está sendo passado corretamente,
pois as vezes passa despercebido as letras maiúsculas…
espero que ajude…
Cornelius
Cara, desculpe, mas esqueci de falar que estou inserindo a imgem num JLabel e ele não suporta o setIconImage… tentei usar aqui mas não funcionou.
viniciusalvess
só lembrando que a pasta onde estão contidas as imgens da sua aplicação , deve ser um pacote para que consiga está lendo essas imagens direto do jar.
Cornelius
Então gente, como falei ali em cima, ate funciona se eu rodar a aplicacao pela IDE, o problema é executando o jar.
Abri o .jar para vocês darem uma olhada nos pacotes:
Como deveria acessar?
andre_bento
Cara,
Essa pasta com a imagem está dentro do seu jar correto?
Tenta executar seu .jar pelo prompt para ver qual o erro está sendo gerado.
Mas cara, vc tem que observar bem que pela IDE ele enxerga a pasta onde o netbeans está configurada para visualizar os projetos, isso é automático.
Mas quando passa para o jar vc tem que especificar o path da imagem por completo, pois ele não sabe o "caminho" onde o netbeans salva o seu projeto por exemplo.
Por exemplo, eu acesso várias informações dentro de um jar no sistema que tenho aqui, mas preciso sempre passar a url completa como
publicvoidcreating(){try{ZipFilezipFile=newZipFile(caminhoJar);Enumeration<?extendsZipEntry>entries=zipFile.entries();while(entries.hasMoreElements()){ZipEntryzipEntry=(ZipEntry)entries.nextElement();Stringname=zipEntry.getName();if(!zipEntry.isDirectory()&&name.contains("NOME_DA_PASTA_QUE_EU_PROCURO")){System.out.println(name);try{checkExists();}catch(Exceptione){JOptionPane.showMessageDialog(null,"Erro ao carregar arquivos do sistema!"+e,"ERRO",JOptionPane.ERROR_MESSAGE);e.printStackTrace();}}}}catch(IOExceptione1){e1.printStackTrace();}}
Espero ter ajudado.
PS: Depois poste aqui o erro que o prompt vai te gerar.(Eu acho que ele não está achando a imagem mesmo)
Abraços
Cornelius
Realmente, o aplicativo não estava encontrando o arquivo , tava dando NullPointerException!
andre_bento, te agradeço pelo código que tu postou, porque funfou aqui finalmente! (Aweeeeeeeeeee!!!)
Para deixar registrado, segue a parte do código:
Achei uma solução mais flexivel para achar o jar na máquina do usuário.
try{ZipFilezipFile=newZipFile(caminhoJar);Enumeration<?extendsZipEntry>entries=zipFile.entries();while(entries.hasMoreElements()){ZipEntryzipEntry=(ZipEntry)entries.nextElement();Stringname=zipEntry.getName();//JOptionPane.showMessageDialog(null,name);if(!zipEntry.isDirectory()&&name.contains("Imagem/forca00")){//Aqui pergunta se achou esse arquivo InputStreamis=ClassLoader.getSystemResourceAsStream(name);lblImagem.setIcon(newImageIcon(ImageIO.read(is)));//Insere o arquivo na JLabel}}}
Agradeço à todos pela ajuda!
andre_bento
Olá amigo.
Cara que bom!!!
Fico feliz que o código funcionou e te atendeu legal ae, tenho isso e várias outras coisas legais qe tenho em um grande sistema.
Qualquer coisa é só falar que estaremos pronto para te ajudar.
Abraços[]
Porque meu jar estava dentro de uma pasta nos documentos do usuário…
Mas ótima colocação a sua amigo!
Cornelius
Sussa!
D
DJRolly
Fiz exatamente como postaram e mesmo assim a imagem não carrega no meu projeto .jar, na IDE mostra normal, já no jar ainda não consegui, rodei pelo prompt de comando e também não retorna erro algum, o programa esta executando normalmente, somente a imagem não carrega.
segue o trecho onde setei a imagem no jLabel, no projeto criei o pacote imagens e arrastei a imagem para dentro.
Alguem poderia analisar o código e ver onde está o erro?
StringcaminhoJar=System.getProperty("java.class.path");try{ZipFilezipFile=newZipFile(caminhoJar);Enumeration<?extendsZipEntry>entries=zipFile.entries();while(entries.hasMoreElements()){ZipEntryzipEntry=(ZipEntry)entries.nextElement();Stringname=zipEntry.getName();//JOptionPane.showMessageDialog(null,name); if(!zipEntry.isDirectory()&&name.contains("imagens/quadrodescricao.JPG")){//Aqui pergunta se achou esse arquivo InputStreamis=ClassLoader.getSystemResourceAsStream(name);Figura_Quadro_Descricao.setIcon(newImageIcon(ImageIO.read(is)));//Insere o arquivo na JLabel }}}catch(Exceptione){JOptionPane.showMessageDialog(this,"Erro ao Carregar a Imagem \n"+e);}Figura_Quadro_Descricao.setLabelFor(Figura_Quadro_Descricao);
Cornelius
Nuss manolo, desinterrou um defunto… rsrsr…
Olha cara, olhando o seu código, acredito que não está funcionando porque tu colocou o caminho do arquivo + arquivo + extensão.
Tenta fazer assim:
if (!zipEntry.isDirectory() && name.contains("imagens/quadrodescricao")) { //Aqui pergunta se achou esse arquivo
Espero ter ajudado!
D
DJRolly
Cornelius:
Nuss manolo, desinterrou um defunto… rsrsr…
Olha cara, olhando o seu código, acredito que não está funcionando porque tu colocou o caminho do arquivo + arquivo + extensão.
Tenta fazer assim:
if (!zipEntry.isDirectory() && name.contains("imagens/quadrodescricao")) { //Aqui pergunta se achou esse arquivo
Espero ter ajudado!
Nuss, muito obrigado pela ajuda, era isso mesmo!!
1º aplicação sozinho é soda… a cabeça fica explodindo e detalhes passam.
Valeu Cornelius, pela resposta correta e pela rapidez com a qual respondeu.