Meu arquivo jar não abre em outro computador

[quote=nissivm]
Gente, ninguém tem um caminho, uma forma que seja com o Eclipse? Eu só sei compilar/rodar/etc se for com o Eclipse. Sou novata no Java. Como faço para meu arquivo .jar poder rodar em qualquer computador? Ainda tô perdida, não sei o que fazer. Tem algum meio de fazer isso que não seja compilando no ms-dos (o que aliás não faço a mínima idéia de como fazer)? Um outro programa talvez? [/quote]

Nissivm, tente o seguinte.
Vamos supor que a sua classe que lida com a imagem seja algo com:

com.seuprojeto.Classe.

E ai, você coloca no mesmo diretório que encontra-se o com. Exemplo:

diretório/com…
diretório/suaImagem.

Para acessar ela, basta dar um new File(“suaImagem”), creio que o seu problema será resolvido.
Fui claro? :slight_smile:

Abraços.

Minha situação atual: as imagens estão na mesma pasta onde estão as pastas bin(que contem os arquivos .class) e src(que contem os arquivos .java). No Eclipse o app roda direitinho, mas ao transformá-lo em .jar, ele não abre.

Podes adicionar o seu jar para download? Eu gostaria de dar uma olhada :slight_smile:
E poste sua classe, por favor.

Abraços.

Oi nel, está acontecendo alguma coisa que não estou conseguindo enviar os arquivos, de qq, dentro desse tópico eu postei anteriormente o jar e uma das classes do meu app, se vc pudesse dar uma olhadinha neles eu agradeceria :slight_smile:

Oi!

Já alterou a forma de leitura de seus arquivos como mencionamos? Você tem o ImageIO.read() não é?
Adicione apenas o nome do arquivo, exemplo, suaFigura.png. Sem /, dir ou algo do tipo, apenas o nome.

O seu Jar TreasureHunt.jar possui três diretórios:

  • META-INF
  • org
  • treasure_hunt

Perfeito? Adicione sua imagem ali, como se fosse um quarto diretório, ficaria assim seu JAR

  • META-INF
  • org
  • treasure_hunt
  • suaImagem.png

Abraços.

Mas para adicionar as imagens no jar tenho que descompactá-lo antes (fiz isso), certo? Como faço para recompactar a pasta já com as imagens (estava inclusive procurando um aplicativo para isso)?

Você já tem o aplicativo que faz isso, chama-se Eclipse.
Coloque, como eu já lhe disse, a imagem na raiz de seu projeto. Dê Export no seu projeto todo.
Seleciona o Java, JAR e ele vai abrir uma nova telinha, certo?

Nessa tela, é divido em dois, o lado direito vai mostrar os arquivos que deseja que esteja adicionado ao JAR na geração dele, basta selecionar as imagens que deseja utilizar e bingo, ele gera o JAR com elas para você :slight_smile:

Dá uma olhada aqui e aqui!. Inclusive, nesse segundo link, exemplica o jar sendo gerado com imagens.

Lembre-se, tão importante quanto gerar seu JAR é a forma como faz a leitura do arquivo na sua classe. Portanto, ambos devem estar corretos :slight_smile:

Abraços!

  1. O primeiro link ensina como fazer o jar executável no Eclipse - já sei como faz

  2. O segundo link ensina a colocar as imagens, com comandos e de uma forma que eu não sei como é que faz, não sei fazer essas compilações sem ser com Eclipse, conforme eu já disse

  3. O que é exatamente a RAIZ DO PROJETO? Conforme disse a pouco, as imagens estão na mesma pasta onde estão as pastas bin(que contem os arquivos .class) e src(que contem os arquivos .java). É isso que é a raiz do projeto? No Eclipse jdk 3.6, quando vc cria um projeto, vc tem a pasta do projeto e, dentro dessa pasta, vc tem as pastas bin, src e .settings e os arquivos .classpath e .project. As imagens estão na pasta do projeto. No Eclipse, tudo está funcionando muito bem. Mas, ao criar o jar, o jar não roda.

Então, será que eu descompacto esse jar, insiro as imagens, crio um novo projeto com essa pasta descompactada e crio o jar novamente?

Eu fui nessa tela que é dividida em duas (vc acessa ela ao clicar export> JAR File) e não dá para selecionar arquivos para adicionar na tela da direita, talvez numa versão + antiga do Eclipse desse.

Colega, é exatamente essa a intenção, mostrar como gerar o JAR fora do Eclipse. Sim, é essa a pasta raiz do seu projeto. Criou o projeto “ProjetoNissiv”, perfeito? Joga dentro do projeto, é aqui que será raiz, a pasta src é só para suas classes Java. Pronto! Agora é só gerar o seu JAR. O Eclipse vai gerar ele com as figuras dentro e prontinho, podes usar tranquilamente!

Bom, pois se um dia isso funcionou, não funciona mais… Segue uma imagem da minha estrutura de pastas… Obrigada pela atenção gente, se tiverem algo novo a acrescentar, por favor façam isso…


É isso mesmo.

1 - O JAR gerado contém as figuras?
2 - Como está a sua classe agora de leitura do arquivo? Poste-a!

Abraços.

  1. O JAR gerado não abre, então acho que não

  2. Aí vai a classe Index, que é a que contem o main e ilustra como as imagens estão sendo chamadas em todo o app (que só tem 3 classes):

package treasure_hunt;

import javax.imageio.ImageIO;
import javax.swing.*;  
import java.awt.*;  
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class Index {
	
	JFrame moldura = new JFrame("Treasure Hunt - Desenvolvido por Nissi Miranda");
	JPanel painel = new JPanel();
	JLabel label = new JLabel();
	BufferedImage imgFundo;
	BufferedImage imgFundo2;
	BufferedImage imgPergaminhos;
	JButton btnAnterior = new JButton("Previous");
	JButton btnProximo = new JButton("Next");
    JButton btnInstrucoes = new JButton("Instructions");  
    JButton btnJogar = new JButton("Play");	       
    JButton btnSair = new JButton("Exit");
    int i = 0;
	File[] pergaminhos = new File[4];

	public static void main(String[] args) {
		Index comecar = new Index();  
		comecar.iniciar();
	}
	
	private void iniciar(){
		
		try{

	        moldura.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	        
	        painel.setLayout(null);
	        painel.setBackground(new Color(240, 203, 143));
	        
			//imgFundo = ImageIO.read(new File("C:\Users\Nissi\Documents\Docum_Nissi\Eclipse_JSE_Helios_Workspace\Meus Aplicativos Java\Treasure_Hunt\imagens\ImgAbertura.bmp")); 
			imgFundo = ImageIO.read(new File("ImgAbertura.bmp"));
			                                             			
			ImageIcon icon = new ImageIcon(imgFundo);
			
			label.setIcon(icon);
			label.setBounds(0, 0, imgFundo.getWidth(), imgFundo.getHeight());
			painel.add(label);
	        
			btnAnterior.setBounds(10, 645, 100, 20);
	        btnProximo.setBounds(120, 645, 60, 20);
	        btnInstrucoes.setBounds(35, 645, 120, 20);
	        btnJogar.setBounds(190, 645, 80, 20);
	        btnSair.setBounds(925, 645, 80, 20);
	        
	        btnAnterior.setForeground(Color.WHITE);
	        btnAnterior.setBackground(new Color(102, 51, 0));
	        btnAnterior.setFocusPainted(false);
	        btnAnterior.setBorderPainted(false);
	        btnAnterior.setCursor(new Cursor(Cursor.HAND_CURSOR));
	        
	        btnProximo.setForeground(Color.WHITE);
	        btnProximo.setBackground(new Color(102, 51, 0));
	        btnProximo.setFocusPainted(false);
	        btnProximo.setBorderPainted(false);
	        btnProximo.setCursor(new Cursor(Cursor.HAND_CURSOR));
	        
	        btnInstrucoes.setForeground(Color.WHITE);
	        btnInstrucoes.setBackground(new Color(102, 51, 0));
	        btnInstrucoes.setFocusPainted(false);
	        btnInstrucoes.setBorderPainted(false);
	        btnInstrucoes.setCursor(new Cursor(Cursor.HAND_CURSOR));
	        	        
	        btnJogar.setForeground(Color.WHITE);
	        btnJogar.setBackground(new Color(102, 51, 0));
	        btnJogar.setFocusPainted(false);
	        btnJogar.setBorderPainted(false);
	        btnJogar.setCursor(new Cursor(Cursor.HAND_CURSOR));
	        
	        btnSair.setForeground(Color.WHITE);
	        btnSair.setBackground(new Color(102, 51, 0));
	        btnSair.setFocusPainted(false);
	        btnSair.setBorderPainted(false);
	        btnSair.setCursor(new Cursor(Cursor.HAND_CURSOR));
	        
	        btnAnterior.addActionListener(new botaoAnteriorListener());
	        btnProximo.addActionListener(new botaoProximoListener());
	        btnInstrucoes.addActionListener(new botaoInstrucoesListener());
	        btnJogar.addActionListener(new botaoJogarListener());
	        btnSair.addActionListener(new botaoSairListener());
	        
	        painel.add(btnAnterior);
	        painel.add(btnProximo);
	        painel.add(btnInstrucoes);  
	        painel.add(btnJogar);  
	        painel.add(btnSair);
	        
	        btnAnterior.setVisible(false);
	        btnProximo.setVisible(false);
	              					
	        moldura.getContentPane().add(painel);
	        
	        moldura.setSize(label.getWidth(), 700);
	        moldura.setLocation(170, 10);
	        moldura.setVisible(true); 
	        moldura.setResizable(false); //Impede que o usuário redimensione a janela do aplicativo
	        
			}catch(IOException e){
	        	e.printStackTrace();
	        }
	    }
	
	class botaoAnteriorListener implements ActionListener {
		public void actionPerformed(ActionEvent arg0) {
			
			try{
				if(i > 0){
					i--;
					
					//imgFundo = ImageIO.read(new File("C:\Users\Nissi\Documents\Docum_Nissi\Eclipse_JSE_Helios_Workspace\Meus Aplicativos Java\Treasure_Hunt\imagens\ImgInstrucoes.bmp"));
					imgFundo = ImageIO.read(new File("ImgInstrucoes.bmp"));
					imgPergaminhos = ImageIO.read(pergaminhos[i]);
		        	int w = imgPergaminhos.getWidth();   
					int h = imgPergaminhos.getHeight();
					
					//Obtém o Graphics2D da imagem 1 (fundo), para desenhar sobre ela o logo.
					Graphics2D graphics = imgFundo.createGraphics();  
					graphics.drawImage(imgPergaminhos, 290, 20, w, h, null);
					graphics.dispose(); //Libera os recursos ocupados pela "Caneta"
					
					ImageIcon icon = new ImageIcon(imgFundo);			
					label.setIcon(icon);
					label.setBounds(0, 0, imgFundo.getWidth(), imgFundo.getHeight());
					painel.add(label);
		        }else{
		        	
		        }				
			}catch(IOException e){
				e.printStackTrace();
			}
			
		}		
	}
	
	class botaoProximoListener implements ActionListener {
		public void actionPerformed(ActionEvent evt) {
			i++;
			
			try{
				if(i < 4){
					//imgFundo = ImageIO.read(new File("C:\Users\Nissi\Documents\Docum_Nissi\Eclipse_JSE_Helios_Workspace\Meus Aplicativos Java\Treasure_Hunt\imagens\ImgInstrucoes.bmp"));
					imgFundo = ImageIO.read(new File("ImgInstrucoes.bmp"));
					imgPergaminhos = ImageIO.read(pergaminhos[i]);
		        	int w = imgPergaminhos.getWidth();   
					int h = imgPergaminhos.getHeight();
					
					//Obtém o Graphics2D da imagem 1 (fundo), para desenhar sobre ela o logo.
					Graphics2D graphics = imgFundo.createGraphics();  
					graphics.drawImage(imgPergaminhos, 290, 20, w, h, null);
					graphics.dispose(); //Libera os recursos ocupados pela "Caneta"
					
					ImageIcon icon = new ImageIcon(imgFundo);			
					label.setIcon(icon);
					label.setBounds(0, 0, imgFundo.getWidth(), imgFundo.getHeight());
					painel.add(label);
		        }else{
		        	i--;
		        }				
			}catch(IOException e){
				e.printStackTrace();
			}
		}		
	}
	
	class botaoInstrucoesListener implements ActionListener {		
		public void actionPerformed(ActionEvent arg0) {
			
			btnAnterior.setVisible(true);
			btnProximo.setVisible(true);
			btnInstrucoes.setVisible(false);
			
			try {
				
				//pergaminhos[0] = new File("C:\Users\Nissi\Documents\Docum_Nissi\Eclipse_JSE_Helios_Workspace\Meus Aplicativos Java\Treasure_Hunt\imagens\pergaminho1.png");
		    	//pergaminhos[1] = new File("C:\Users\Nissi\Documents\Docum_Nissi\Eclipse_JSE_Helios_Workspace\Meus Aplicativos Java\Treasure_Hunt\imagens\pergaminho2.png");
		    	//pergaminhos[2] = new File("C:\Users\Nissi\Documents\Docum_Nissi\Eclipse_JSE_Helios_Workspace\Meus Aplicativos Java\Treasure_Hunt\imagens\pergaminho3.png");
		    	//pergaminhos[3] = new File("C:\Users\Nissi\Documents\Docum_Nissi\Eclipse_JSE_Helios_Workspace\Meus Aplicativos Java\Treasure_Hunt\imagens\pergaminho4.png");
		    	pergaminhos[0] = new File("pergaminho1.png");
		    	pergaminhos[1] = new File("pergaminho2.png");
		    	pergaminhos[2] = new File("pergaminho3.png");
		    	pergaminhos[3] = new File("pergaminho4.png");
				
		    	//imgFundo = ImageIO.read(new File("C:\Users\Nissi\Documents\Docum_Nissi\Eclipse_JSE_Helios_Workspace\Meus Aplicativos Java\Treasure_Hunt\imagens\ImgInstrucoes.bmp"));
		    	imgFundo = ImageIO.read(new File("ImgInstrucoes.bmp"));
				imgPergaminhos = ImageIO.read(pergaminhos[i]);
				
				int w = imgPergaminhos.getWidth();   
				int h = imgPergaminhos.getHeight();
				
				Graphics2D graphics = imgFundo.createGraphics();  
				graphics.drawImage(imgPergaminhos, 290, 20, w, h, null);
				graphics.dispose(); //Libera os recursos ocupados pela "Caneta"
				
				ImageIcon icon = new ImageIcon(imgFundo);			
				label.setIcon(icon);
				label.setBounds(0, 0, imgFundo.getWidth(), imgFundo.getHeight());
				painel.add(label);
				
			} catch (IOException e) {
				e.printStackTrace();
			}
		}		
	}
				
	class botaoJogarListener implements ActionListener {
		public void actionPerformed(ActionEvent evt) {
			Jogo objeto = new Jogo();
			moldura.getContentPane().removeAll();
			moldura.getContentPane().add(objeto.inicial());
			moldura.validate();
			moldura.setVisible(true);			
		}				
	}
	
	class botaoSairListener implements ActionListener {		
		public void actionPerformed(ActionEvent arg0) {
			System.exit(0);
		}		
	}
	
	public void recebePainel(JPanel pan){
		JPanel receptor = new JPanel();
		receptor = pan;
		moldura.getContentPane().removeAll();
		moldura.getContentPane().add(receptor);
		moldura.validate();
		moldura.setVisible(true);
	}

}