Olá pessoal, tudo bem?
Eu tenho um JFrame com uma imagem de fundo(background), que funciona corretamente, mas eu gostaria de saber se é possível passar um caminho “genérico” para imagem…
Tipo no lugar disso…
jPanelWithBackground1=newfechamento.zfsd.JPanelWithBackground("C:/Users/Desktop/Development/Documento/exemplo1.jpg");//Código personalizado no JFrame/*..........................................................''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''*/importjava.awt.Graphics;importjava.awt.Graphics2D;importjava.awt.image.BufferedImage;importjava.io.File;importjava.io.IOException;importjava.util.logging.Level;importjava.util.logging.Logger;importjavax.imageio.ImageIO;importjavax.swing.JPanel;publicclassJPanelWithBackgroundextendsJPanel{privateStringpathImage="";// variável que vai receber o caminho da imagempublicJPanelWithBackground(){}publicJPanelWithBackground(StringpathImage){this.pathImage=pathImage;}@OverridepublicvoidpaintComponent(Graphicsg){Graphics2Dgr=(Graphics2D)g.create();try{BufferedImagebuffer=ImageIO.read(newFile(pathImage));gr.drawImage(buffer,null,0,0);// desenha a imagem}catch(IOExceptionex){Logger.getLogger(JPanelWithBackground.class.getName()).log(Level.SEVERE,null,ex);}}}
Caso seja uma imagem “fixa”, podes usar para carregar do seu JAR ou pegar de um caminho relativo.
Algo com “/images/image.jpg”, por exemplo. Para pegar o início do path, ai tu verifica se está no seu jar, classpath e etc.
Abraços.
xandelol
Obrigado, vou dar uma olhada nisso.
Demys_Cota
Seja a imagem estiver no mesmo pacote do seu codigo.
é só usar a nome da imagem
(funçãoPegaCaminho(“exemplo.jpg”));
porém se estiver em outra vc deverá fazer mais ou menos istó
Eu dei uma pesquisada e encontrei algo que acredito que vá me ajudar…
publicStringCaminhoJar(Stringnomeimg){StringcaminhoJar=System.getProperty("java.class.path");Stringpath="";try{ZipFilezipFile=newZipFile(caminhoJar);Enumeration<?extendsZipEntry>entries=zipFile.entries();while(entries.hasMoreElements()){ZipEntryzipEntry=(ZipEntry)entries.nextElement();StringpathJar=zipEntry.getName();if(!zipEntry.isDirectory()&&pathJar.contains(nomeimg)){InputStreamis=ClassLoader.getSystemResourceAsStream(pathJar);path=is.toString();}}}catch(Exceptione){JOptionPane.showMessageDialog(this,"Erro ao Carregar a Imagem \n"+e);}returnpath;}
Talvez seja isso que o nel me indicou… :?
Mas está dando esse erro aqui:
java.util.zip.ZipException:zipfilenametoolong
Eu estou chamando a função CaminhoJar assim no meu JFrame:
xandelol porque está descompactando seu JAR e varrendo o mesmo a procura da imagem ?
Esse JAR não é gerado por você, ou seja, é externo ?
Porque se é algo gerado por você, o que eu tinha em mente é o uso do método getResourceAsStream, da classe Class.
O que não falta são exemplos na net sobre o uso desse método. Dessa forma, com uma classe dentro do JAR, é relativamente simples encontrar a imagem e carregar a mesma.
Sobre a sua exceção, teria como posta-la por completo e indicar onde ela acusa a exceção?
xandelol
Valeu nel vou dar uma olhada no [color=blue]getResourceAsStream[/color].
Sobre a exceção, é essa aqui:
Exception in thread "main" java.lang.RuntimeException: java.util.zip.ZipException: zip file name too long
at fechamento.zfsd.Menu.CaminhoJar(Menu.java:665)
at fechamento.zfsd.Menu.initComponents(Menu.java:61)
at fechamento.zfsd.Menu.<init>(Menu.java:32)
at fechamento.zfsd.FechamentoZFSD.main(FechamentoZFSD.java:11)
Caused by: java.util.zip.ZipException: zip file name too long
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(ZipFile.java:114)
at java.util.zip.ZipFile.<init>(ZipFile.java:75)
at fechamento.zfsd.Menu.CaminhoJar(Menu.java:654)
... 3 more
Java Result: 1
A linha que a exceção indica é essa:
at fechamento.zfsd.Menu.CaminhoJar(Menu.java:654) [/b]
xandelol
Vou tentar…
Essas linhas são o meu [color=blue]try[/color] e [color=blue]catch[/color] do meu caminhoJar
nel
xandelol:
Vou tentar…
Essas linhas são o meu [color=blue]try[/color] e [color=blue]catch[/color] do meu caminhoJar
Ok.
Não colega, me refiro tu postar essas linhas de código. São essenciais para identificar exatamente a linha em que o erro ocorre.
Eu acredito que seja algo relacionado ao nome do seu JAR, como a própria exceção indica. Por isso, saber exatamente as linhas que ele aponta no código é importante.
O try-catch nada mais é que um possível tratamento a uma exceção, ok?
xandelol
Então nel eu mudei o nome do meu JAR(ficou “fechazf”), mas não teve efeito, continua dando o mesmo erro.
xandelol
Então [b]nel[/b] eu mudei o nome do meu JAR(ficou "fechazf"), mas não teve efeito, continua dando o mesmo erro.
//Deu um erro e duplicou a mensagem!
xandelol
Depois de um tempo achei a solução para o meu problema…
Usei esse código para pegar o path do meu arguivo.
Agora eu tenho um outro problema …
No Netbeans o código que eu usei acima funciona perfeitamente, mas no .jar, ele não funciona.
Alguém pode me ajudar?
xandelol
Já consegui resolver!!!
Era só colar a pasta src na pasta dist do .jar.