Eu tou com o seguinte problema: eu fiz um jframe com uns botões, e nesses botões eu coloquei umas imagens. O problema é que quando eu exporto no formato .jar as quando executo o arquivo as imagens não aparecem. Porque isso acontece?
Problema com .jar
5 Respostas
posta o código que vc referencia as imagens… a referencia aos arquivos tem que ser dinamica.
Cara, quando eu coloco imagens nos programas costumo colocar as imagens no em um pacote “imagens” e então chamo essas imagens com uma referência ao classpath
O que pode estar acontecendo com vc é que não empacotou as imagens no jar ou elas ficaram em lugares diferentes…
Veja:
-meupacote
|-telas
|–imagens
|—.png
|—.jpg
|—.gif
|-logica
|–.java
Desse jeito eu referencio a imagem como: meupacote\telas\imagens\imagem.png
jButton1.setIcon(new javax.swing.ImageIcon(
getClass().getResource("/meupacote/telas/imagens/imagem.png")));
Aqui ta todo o código:
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.LineBorder;
public class AbrindoSites extends JFrame
{
public static void main( String a[] )
{
JFrame janela = new JFrame( "Favoritos 1.0" );
Painel painel = new Painel();
painel.setBounds( 10, 10, 380, 380 );//configura a posição do painel no frame
janela.setLayout( null );//configura o layout do frame
janela.add( painel );//adiciona o painel ao frame
janela.setSize( 1024, 740 );//configura o tamanho do frame
janela.setVisible( true );//torna o frame visivel
janela.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}//fim do metodo main
}//fim da classe AbrindoSites
/*Esta classe cria todos os componentes internos da gui*/
class Painel extends JPanel
{
private JButton site1 = new JButton();//cria primeiro botao
ImageIcon google = new ImageIcon( "google.gif" );//cria imagem para o botao1
private JButton site2 = new JButton();//cria segundo botao
ImageIcon gdh = new ImageIcon( "gdh.JPG" );
//contrutor sem argumentos da classe
public Painel()
{
setLayout( null );//configura o layout do painel
site1.setBounds( 100, 200, 80, 35 );//configura a posição do botao
site1.setIcon( google );
site1.setToolTipText( "Clique para abrir a página do google" );
site1.setBackground( Color.WHITE );
site1.setBorder( new LineBorder( new Color( 255, 255, 255 ), 1, true ));
//adiciona funcionalidade ao botao
site1.addActionListener(
new ActionListener()
{
public void actionPerformed( ActionEvent e )
{
try
{
Runtime.getRuntime().exec( "cmd.exe /c start iexplore.exe " +
"http://www.google.com.br" );
}//fim do try
catch( IOException io )
{
JOptionPane.showMessageDialog( null,"Não foi possível abrir " +
"a página solicitad" +
"","Mensagem do Programa",JOptionPane.ERROR_MESSAGE );
}//fim do catch
}//fim do actionPerformed
}//fim da classe anonima
);//fim do addActionListener
site2.setBounds( 190, 200, 80, 35 );
site2.setIcon( gdh );
site2.setToolTipText( "Clique para abrir a página do Guia do Hardware" );
site2.setBackground( Color.WHITE );
site2.setBorder( new LineBorder( new Color( 255, 255, 255 ), 1, true ));
site2.addActionListener(
new ActionListener()
{
public void actionPerformed( ActionEvent e )
{
try
{
Runtime.getRuntime().exec( "cmd.exe /c start iexplore.exe " +
"http://www.guiadohardware.net" );
}
catch( IOException io )
{
JOptionPane.showMessageDialog( null,"Não foi possível abrir " +
"a página solicitad" +
"","Mensagem do Programa",JOptionPane.ERROR_MESSAGE );
}
}
});
//adiciona os botoes ao painel
add( site1 );
add( site2 );
}//fim do construtor
}//fim da classe painel
Aqui ta todo o código:import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import javax.swing.*; import javax.swing.border.Border; import javax.swing.border.LineBorder; public class AbrindoSites extends JFrame { public static void main( String a[] ) { JFrame janela = new JFrame( "Favoritos 1.0" ); Painel painel = new Painel(); painel.setBounds( 10, 10, 380, 380 );//configura a posição do painel no frame janela.setLayout( null );//configura o layout do frame janela.add( painel );//adiciona o painel ao frame janela.setSize( 1024, 740 );//configura o tamanho do frame janela.setVisible( true );//torna o frame visivel janela.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); }//fim do metodo main }//fim da classe AbrindoSites /*Esta classe cria todos os componentes internos da gui*/ class Painel extends JPanel { private JButton site1 = new JButton();//cria primeiro botao ImageIcon google = new ImageIcon( "google.gif" );//cria imagem para o botao1 private JButton site2 = new JButton();//cria segundo botao ImageIcon gdh = new ImageIcon( "gdh.JPG" ); //contrutor sem argumentos da classe public Painel() { setLayout( null );//configura o layout do painel site1.setBounds( 100, 200, 80, 35 );//configura a posição do botao site1.setIcon( google ); site1.setToolTipText( "Clique para abrir a página do google" ); site1.setBackground( Color.WHITE ); site1.setBorder( new LineBorder( new Color( 255, 255, 255 ), 1, true )); //adiciona funcionalidade ao botao site1.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent e ) { try { Runtime.getRuntime().exec( "cmd.exe /c start iexplore.exe " + "http://www.google.com.br" ); }//fim do try catch( IOException io ) { JOptionPane.showMessageDialog( null,"Não foi possível abrir " + "a página solicitad" + "","Mensagem do Programa",JOptionPane.ERROR_MESSAGE ); }//fim do catch }//fim do actionPerformed }//fim da classe anonima );//fim do addActionListener site2.setBounds( 190, 200, 80, 35 ); site2.setIcon( gdh ); site2.setToolTipText( "Clique para abrir a página do Guia do Hardware" ); site2.setBackground( Color.WHITE ); site2.setBorder( new LineBorder( new Color( 255, 255, 255 ), 1, true )); site2.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent e ) { try { Runtime.getRuntime().exec( "cmd.exe /c start iexplore.exe " + "http://www.guiadohardware.net" ); } catch( IOException io ) { JOptionPane.showMessageDialog( null,"Não foi possível abrir " + "a página solicitad" + "","Mensagem do Programa",JOptionPane.ERROR_MESSAGE ); } } }); //adiciona os botoes ao painel add( site1 ); add( site2 ); }//fim do construtor }//fim da classe painel
Cara o problema eh que vc ta inserindo o path direto no construtor do ImageIcon e para vc pegar a imagem dentro do jar vc deve usar o getResource como nosso amigo marcos.junqueira fez acima!
espero ter ajudado.
Consegui resolver o problema com o que vcs me disseram.
Valeu.