Problema com .jar

5 respostas
Jorgev

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?

5 Respostas

SmartCardMan

posta o código que vc referencia as imagens… a referencia aos arquivos tem que ser dinamica.

marcos.junqueira

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")));
Jorgev

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
SmartCardMan
Jorgev:
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.

Jorgev

Consegui resolver o problema com o que vcs me disseram.

Valeu.

Criado 26 de julho de 2007
Ultima resposta 1 de ago. de 2007
Respostas 5
Participantes 3