Estou tendo um problema aqui com a leitura de uma imagem em um aquivo Jar. O que me deixa mais confuso é que quando rodo o programa via eclipse funciona normalmente, mas depois que exporto para o jar quando tento rodar o programa eu recebo a seguinte exception:
Verifique se as letras maiúsculas e minúsculas coincidem. Num .jar isso faz diferença;
Verifique se o caminho da imagem está certo. Ele deve começar com /;
Verifique se o conteúdo da variável pName está mesmo correto.
M
malfattirs
Olá ViniGodoy!
Se eu coloco nomes que iniciam com / ele nao encontra o arquivo mesmo no eclipse, como por exemplo:
/images/teste.gif ou //images//teste.gif
No eclipse ele funciona com
./images/teste.gif ou \images\teste.gif ou \images\teste.gif
Mas nenhum destes funcionou no jar
Abraços
ViniGodoy
Estranho, só dando um copy&paste do meu projeto:
privateURLimageURL(Stringname){returngetClass().getResource("/com/siemens/com/husim/item/gui/images/"+name);}/***Loadsthegivenimageasabufferedimage.**@paramnameThenameoftheimage.(e.g.itemLogo.png)*@returnTheimageloadedasabufferedimageornulliftheimagecould*notbeloaded.*/publicBufferedImagegetImage(Stringname){BufferedImageimg=images.get(name);if(img!=null)returnimg;try{img=ImageIO.read(imageURL(name));images.put(name,img);returnimg;}catch(IOExceptione){System.err.println("The image "+name+" could not be loaded.");returnnull;}}
No eclipse (que também é o que eu uso), onde você está guardando as suas imagens? Geralmente elas tem que ficar junto aos sources, caso contrário elas não serão encontradas. Isso porque o getResource() vai procurar dentro do seu classpath.
Nem que vc crie um pacote chamado image na raiz dos sources.
No meu caso, a propriedade images refere-se a um mapa. Nada mais é do que um cache de imagens. Como essa classe é usada para guardar ícones, isso evita carregar os ícones multiplas vezes, além de poupar um pouco de memória.
M
malfattirs
Olá ViniGodoy!
Você nem sabe o que era. Uma imagem maldita estava com o nome imagem.GIF em maiúsculo. Porém o windows explorer exibia imagem.gif, então eu colocava imagem.gif no programa. Percebi o erro quando dei um dir no bom e velho DOS.
Affff…
Obrigado pelas dicas.
Abraços
ViniGodoy
É, tem que tomar cuidado porque o Windows não é case sensitive, mas o .jar é. O que é bom, já que isso te força a deixar o problema compatível com Unix também, mesmo que depois vc decida tirar o arquivo do .jar.