Meu arquivo jar não abre em outro computador

31 respostas
nissivm

Oi gente, fiz meu arquivo .jar da seguinte forma(fiz pelo Eclipse):

  1. Botão direito no nome do projeto > exportar
  2. Escolhi Runnable JAR File
  3. Na janela, escolhi a classe que tem o main, o destino e, em Library handling, escolhi a opção do meio “Package required libraries into generated JAR”.
  4. Cliquei finish

O aplicativo abre no meu computador, mas não abre no laptop da minha irmã! Instalei nele o JRE 6u26 (meu JDK tb é o 6u26), mas não adiantou…

Tô enviando o aplicativo para vcs testarem.

Não sei usar aquele prompt do windows para ver o que há de errado…

Se vcs puderem testar e me dar um feedback seria ótimo

Desde já agradeço gente

31 Respostas

markinlelo

Parece que seu projeto usa uma Imagem,
tenta levar ela junto do JAR

L

vc rodou via eclipse e funfa normal?

nissivm

ele usa sim, várias imagens, mas eu teria que enviar a pasta de imagens junto com o jar? Não era para o arquivo jar suprir essa necessidade? E mesmo que eu enviasse, a pasta de imagens não teria o exato endereço que se encontra nas classes…

nissivm

lokit"s:
vc rodou via eclipse e funfa normal?

Sim, aqui no meu computador ele roda normal, mas constatei que se eu só mover a pasta onde estão as imagens (usadas na interface gráfica do programa) para outro local ele não roda mais…

L

vendo seu código essa imagem não esta dentro da pasta

Index.this.pergaminhos[0] = new File("C:\Users\Nissi\Documents\Docum_Nissi\Eclipse_JSE_Helios_Workspace\Meus Aplicativos Java\Treasure_Hunt\imagens\pergaminho1.png");
        Index.this.pergaminhos[1] = new File("C:\Users\Nissi\Documents\Docum_Nissi\Eclipse_JSE_Helios_Workspace\Meus Aplicativos Java\Treasure_Hunt\imagens\pergaminho2.png");
        Index.this.pergaminhos[2] = new File("C:\Users\Nissi\Documents\Docum_Nissi\Eclipse_JSE_Helios_Workspace\Meus Aplicativos Java\Treasure_Hunt\imagens\pergaminho3.png");
        Index.this.pergaminhos[3] = new File("C:\Users\Nissi\Documents\Docum_Nissi\Eclipse_JSE_Helios_Workspace\Meus Aplicativos Java\Treasure_Hunt\imagens\pergaminho4.png");

        Index.this.imgFundo = ImageIO.read(new File("C:\Users\Nissi\Documents\Docum_Nissi\Eclipse_JSE_Helios_Workspace\Meus Aplicativos Java\Treasure_Hunt\imagens\ImgInstrucoes.bmp"));

são caminhos de imgens suas certo....

por isso não vai rodar mesmo!!

nissivm

Onde coloco essas imagens então, ou como configuro elas?

Aí vai uma das classes:

package treasure_hunt;

import java.awt.Color;
import java.awt.Cursor;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Jogo {
	
	int numOfFoundChests = 0;
	int numCoins = 0;
	int indicePremios = 0;
	String result;
	File[] mapas = new File[11];
	File[] premios = new File[5];
	BufferedImage image;
	BufferedImage image2;
	BufferedImage imageIcon;
	JLabel lblMainImage = new JLabel();
	JPanel painel = new JPanel();
	JLabel lblinstr = new JLabel("Type a letter(A-H), followed by a number(1-5):");
	JTextField txtCodigo = new JTextField("");
	JLabel lblmsg = new JLabel("");
	JLabel lblimgIcon = new JLabel();
	JLabel lblnumMoedas = new JLabel("You have 0 golden coins");
	JButton btnEncontrar = new JButton("Find!");  
    JButton btnSair = new JButton("Exit");
    
    Arcas arca1 = new Arcas();
    Arcas arca2 = new Arcas();
    Arcas arca3 = new Arcas();
    Arcas arca4 = new Arcas();
    Arcas arca5 = new Arcas();
    Arcas arca6 = new Arcas();
    Arcas arca7 = new Arcas();
    Arcas arca8 = new Arcas();
    Arcas arca9 = new Arcas();
    Arcas arca10 = new Arcas();
    
    ArrayList<Arcas> arcasList = new ArrayList<Arcas>();
    ArrayList<String> posicoes = new ArrayList<String>();
    ArrayList<String> nomes = new ArrayList<String>();
	
	public JPanel inicial(){
		
		Arcas obj = new Arcas();
		posicoes = obj.choosePosition();
		Arcas obj2 = new Arcas();
		nomes = obj2.chooseName();
		
		arca1.setPosicion(posicoes.get(0));
		arca1.setName(nomes.get(0));
		arca2.setPosicion(posicoes.get(1));
		arca2.setName(nomes.get(1));
		arca3.setPosicion(posicoes.get(2));
		arca3.setName(nomes.get(2));
		arca4.setPosicion(posicoes.get(3));
		arca4.setName(nomes.get(3));
		arca5.setPosicion(posicoes.get(4));
		arca5.setName(nomes.get(4));
		arca6.setPosicion(posicoes.get(5));
		arca6.setName(nomes.get(5));
		arca7.setPosicion(posicoes.get(6));
		arca7.setName(nomes.get(6));
		arca8.setPosicion(posicoes.get(7));
		arca8.setName(nomes.get(7));
		arca9.setPosicion(posicoes.get(8));
		arca9.setName(nomes.get(8));
		arca10.setPosicion(posicoes.get(9));
		arca10.setName(nomes.get(9));
		
		/*Teste:
		System.out.println(arca1.getPosition());
		System.out.print(arca1.getName());
		System.out.println(arca2.getPosition());
		System.out.print(arca2.getName());
		System.out.println(arca3.getPosition());
		System.out.print(arca3.getName());
		System.out.println(arca4.getPosition());
		System.out.print(arca4.getName());
		System.out.println(arca5.getPosition());
		System.out.print(arca5.getName());
		System.out.println(arca6.getPosition());
		System.out.print(arca6.getName());
		System.out.println(arca7.getPosition());
		System.out.print(arca7.getName());
		System.out.println(arca8.getPosition());
		System.out.print(arca8.getName());
		System.out.println(arca9.getPosition());
		System.out.print(arca9.getName());
		System.out.println(arca10.getPosition());
		System.out.print(arca10.getName());
		System.out.println("\n");*/
		
		arcasList.add(arca1);
		arcasList.add(arca2);
		arcasList.add(arca3);
		arcasList.add(arca4);
		arcasList.add(arca5);
		arcasList.add(arca6);
		arcasList.add(arca7);
		arcasList.add(arca8);
		arcasList.add(arca9);
		arcasList.add(arca10);
							
			//Características painel
			painel.setLayout(null);
	        painel.setBackground(new Color(240, 203, 143));
	        
	        //Criação imagem principal
	        mapas[0] = new File("C:\Users\Nissi\Documents\Docum_Nissi\Eclipse_JSE_Helios_Workspace\Meus Aplicativos Java\Treasure_Hunt\imagens\mapaVazio.png");
	        mapas[1] = new File("C:\Users\Nissi\Documents\Docum_Nissi\Eclipse_JSE_Helios_Workspace\Meus Aplicativos Java\Treasure_Hunt\imagens\mapaCom1Bau.png");
	        mapas[2] = new File("C:\Users\Nissi\Documents\Docum_Nissi\Eclipse_JSE_Helios_Workspace\Meus Aplicativos Java\Treasure_Hunt\imagens\mapaCom2Baus.png");
	        mapas[3] = new File("C:\Users\Nissi\Documents\Docum_Nissi\Eclipse_JSE_Helios_Workspace\Meus Aplicativos Java\Treasure_Hunt\imagens\mapaCom3Baus.png");
	        mapas[4] = new File("C:\Users\Nissi\Documents\Docum_Nissi\Eclipse_JSE_Helios_Workspace\Meus Aplicativos Java\Treasure_Hunt\imagens\mapaCom4Baus.png");
	        mapas[5] = new File("C:\Users\Nissi\Documents\Docum_Nissi\Eclipse_JSE_Helios_Workspace\Meus Aplicativos Java\Treasure_Hunt\imagens\mapaCom5Baus.png");
	        mapas[6] = new File("C:\Users\Nissi\Documents\Docum_Nissi\Eclipse_JSE_Helios_Workspace\Meus Aplicativos Java\Treasure_Hunt\imagens\mapaCom6Baus.png");
	        mapas[7] = new File("C:\Users\Nissi\Documents\Docum_Nissi\Eclipse_JSE_Helios_Workspace\Meus Aplicativos Java\Treasure_Hunt\imagens\mapaCom7Baus.png");
	        mapas[8] = new File("C:\Users\Nissi\Documents\Docum_Nissi\Eclipse_JSE_Helios_Workspace\Meus Aplicativos Java\Treasure_Hunt\imagens\mapaCom8Baus.png");
	        mapas[9] = new File("C:\Users\Nissi\Documents\Docum_Nissi\Eclipse_JSE_Helios_Workspace\Meus Aplicativos Java\Treasure_Hunt\imagens\mapaCom9Baus.png");
	        mapas[10] = new File("C:\Users\Nissi\Documents\Docum_Nissi\Eclipse_JSE_Helios_Workspace\Meus Aplicativos Java\Treasure_Hunt\imagens\mapaCom10Baus.png");	        
	        
	        try{
	        image = ImageIO.read(new File("C:\Users\Nissi\Documents\Docum_Nissi\Eclipse_JSE_Helios_Workspace\Meus Aplicativos Java\Treasure_Hunt\imagens\ImgInstrucoes.bmp"));	        
	        image2 = ImageIO.read(mapas[numOfFoundChests]);
	        imageIcon = ImageIO.read(new File("C:\Users\Nissi\Documents\Docum_Nissi\Eclipse_JSE_Helios_Workspace\Meus Aplicativos Java\Treasure_Hunt\imagens\Bau_icon.png"));
	        }catch(IOException e){
				e.printStackTrace();
			}
	        
			int w = image2.getWidth();   
			int h = image2.getHeight();
			
			Graphics2D graphics = image.createGraphics();  
			graphics.drawImage(image2, 130, 5, w, h, null);
			graphics.dispose(); //Libera os recursos ocupados pela "Caneta"
			
			ImageIcon icon = new ImageIcon(image);			
			lblMainImage.setIcon(icon);
															
			
			ImageIcon iconeImg = new ImageIcon(imageIcon);
			lblimgIcon.setIcon(iconeImg);
			
			btnEncontrar.setForeground(Color.WHITE);
			btnEncontrar.setBackground(new Color(102, 51, 0));
			btnEncontrar.setFocusPainted(false);
			btnEncontrar.setBorderPainted(false);
			btnEncontrar.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));
				        			 	        
	        //Posicionamento dos elementos no painel
	        lblMainImage.setBounds(0, 0, image.getWidth(), image.getHeight());
	        lblinstr.setBounds(30, 620, 270, 20);
	        txtCodigo.setBounds(30, 645, 60, 20);
	        btnEncontrar.setBounds(100, 645, 80, 20);
	        lblmsg.setBounds(350, 610, 410, 40);
	        lblimgIcon.setBounds(350, 645, imageIcon.getWidth(), imageIcon.getHeight());
	        lblnumMoedas.setBounds(385, 635, 200, 40);
	        btnSair.setBounds(925, 645, 80, 20);
	        
	        //Adição de evento aos botões
	        txtCodigo.addKeyListener(new lblMessageListener());
	        btnEncontrar.addActionListener(new botaoEncontrarListener());
	        btnSair.addActionListener(new botaoSairListener());
	        
	        //Adição ao painel
	        painel.add(lblMainImage);
	        painel.add(lblinstr);
	        painel.add(txtCodigo);
	        painel.add(btnEncontrar);
	        painel.add(lblmsg);
	        painel.add(lblimgIcon);
	        painel.add(lblnumMoedas);
	        painel.add(btnSair);
											
		return painel;
		
	}
	
	class lblMessageListener implements KeyListener {
		public void keyPressed(KeyEvent arg0) {
						
		}
		public void keyReleased(KeyEvent arg0) {
					
		}		
		public void keyTyped(KeyEvent arg0) {
			lblmsg.setText("");			
		}		
	}
				
	class botaoEncontrarListener implements ActionListener {		
		public void actionPerformed(ActionEvent arg0) {
			
			String userGuess = txtCodigo.getText().toUpperCase();
			result = "No chest found, keep looking";
			txtCodigo.setText("");
			
			for(int i = 0; i < arcasList.size(); i++){				
				if(userGuess.equals(arcasList.get(i).getPosition())){
					result = arcasList.get(i).checkResult(arcasList.get(i).getName());
					renovarMapa(i);
					lblmsg.setText(result);
					break;
				}				
			}
			
			lblmsg.setText(result);
			txtCodigo.requestFocus();
		}
	}
				
		public void renovarMapa(int j){
			
			numCoins += arcasList.get(j).getCoins();
			++numOfFoundChests;
			
			try {
				image = ImageIO.read(new File("C:\Users\Nissi\Documents\Docum_Nissi\Eclipse_JSE_Helios_Workspace\Meus Aplicativos Java\Treasure_Hunt\imagens\ImgInstrucoes.bmp"));
				image2 = ImageIO.read(mapas[numOfFoundChests]);
			} catch (IOException e) {				
				e.printStackTrace();
			}
	        			        					
			int w = image2.getWidth();   
			int h = image2.getHeight();
			
			Graphics2D graphics = image.createGraphics();  
			graphics.drawImage(image2, 130, 5, w, h, null);
			graphics.dispose(); //Libera os recursos ocupados pela "Caneta"
			
			ImageIcon icon = new ImageIcon(image);			
			lblMainImage.setIcon(icon);
			
			lblMainImage.setBounds(0, 0, image.getWidth(), image.getHeight());
			
			painel.add(lblMainImage);
			
			arcasList.remove(arcasList.get(j));
													
			String quantMoedas = Integer.toString(numCoins);
			lblnumMoedas.setText("You won " + quantMoedas + " golden coins!");
			
			if(arcasList.isEmpty()){
				result = "Congrats, you've found all ten chests!!";
				lblmsg.setText(result);
				finishGame();			
			}
			
		}
		
	class botaoSairListener implements ActionListener {		
		public void actionPerformed(ActionEvent arg0) {
			System.exit(0);			
		}		
	}
			
	private void finishGame(){
		
		premios[0] = new File("C:\Users\Nissi\Documents\Docum_Nissi\Eclipse_JSE_Helios_Workspace\Meus Aplicativos Java\Treasure_Hunt\imagens\papagaio.bmp");
		premios[1] = new File("C:\Users\Nissi\Documents\Docum_Nissi\Eclipse_JSE_Helios_Workspace\Meus Aplicativos Java\Treasure_Hunt\imagens\espada.bmp");
		premios[2] = new File("C:\Users\Nissi\Documents\Docum_Nissi\Eclipse_JSE_Helios_Workspace\Meus Aplicativos Java\Treasure_Hunt\imagens\canhao.bmp");
		premios[3] = new File("C:\Users\Nissi\Documents\Docum_Nissi\Eclipse_JSE_Helios_Workspace\Meus Aplicativos Java\Treasure_Hunt\imagens\bandeira.bmp");
		premios[4] = new File("C:\Users\Nissi\Documents\Docum_Nissi\Eclipse_JSE_Helios_Workspace\Meus Aplicativos Java\Treasure_Hunt\imagens\navio.bmp");
		
		//lblmsg.setText("");
		//lblmsg.setText();
		
		String quantMoedas = Integer.toString(numCoins);
		lblnumMoedas.setText("Your total of golden coins is " + quantMoedas);
						
		if(numCoins <= 250){
			indicePremios += 0;
		}else if(numCoins <= 350){
			indicePremios += 1;
		}else if(numCoins <= 500){
			indicePremios += 2;
		}else if(numCoins <= 600){
			indicePremios += 3;
		}else{
			indicePremios += 4;
		}
		
		JFrame molduraPremio = new JFrame();
		JPanel painelPremio = new JPanel();
		molduraPremio.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		painelPremio.setLayout(null);
		painelPremio.setBackground(Color.WHITE);
		
		BufferedImage imagemPremio = null;
		JLabel labelPremio = new JLabel();
		try {
			imagemPremio = ImageIO.read(premios[indicePremios]);
		} catch (IOException e) {
			e.printStackTrace();
		}
		ImageIcon icon = new ImageIcon(imagemPremio);
		labelPremio.setIcon(icon);
		labelPremio.setBounds(0, 0, imagemPremio.getWidth(), imagemPremio.getHeight());
		painelPremio.add(labelPremio);
		
		molduraPremio.getContentPane().add(painelPremio);
        
		molduraPremio.setSize(labelPremio.getWidth(), 370);
		molduraPremio.setLocation(500, 100);
		molduraPremio.setVisible(true); 
		molduraPremio.setResizable(false);
		
	}

}
markinlelo

add as imagens no claspath do projeto ou trabalhe com endereço relativo para as imagens

exemplo:

Index.this.pergaminhos[0] = new File(".\imagens\pergaminho1.png");

ai vc manda a pasta imagens junto com o JAR

R

tenta colocar as imagens no seu projeto e se refira a eles com apenas o nome da imagem (ou usando “…/” )

R

opa… markinlelo falou exatamente o q falei =p

L

crie uma pasta chamada images

ai vai jogando todas as suas imagens dentro dela, tipo vai ser a chamada delas

mapas[0] = new File("/images/mapaVazio.png");

entendeu,ai copia tudo dentro da pasta qq for gerar o .jar

F

O fato de funcionar no seu computador é pq lá vc tem as imagens.

Jogue todas estas imagens para dentro do seu projeto antes de criar o .jar, é provável que resolva.

E troque ao invés do caminho c:… por apenas “imagem.jpg”, tendo em vista que elas estarão dentro do projeto não precisa especificar o lugar onde as mesmas estão.

nissivm

Far.ST:
O fato de funcionar no seu computador é pq lá vc tem as imagens.

Jogue todas estas imagens para dentro do seu projeto antes de criar o .jar, é provável que resolva.

E troque ao invés do caminho c:… por apenas “imagem.jpg”, tendo em vista que elas estarão dentro do projeto não precisa especificar o lugar onde as mesmas estão.

Tenho que colocar a pasta das imagens dentro da pasta do projeto (a pasta que contém as pastas src, bin, .settings)?

nel

nissivm:
Far.ST:
O fato de funcionar no seu computador é pq lá vc tem as imagens.

Jogue todas estas imagens para dentro do seu projeto antes de criar o .jar, é provável que resolva.

E troque ao invés do caminho c:… por apenas “imagem.jpg”, tendo em vista que elas estarão dentro do projeto não precisa especificar o lugar onde as mesmas estão.

Tenho que colocar a pasta das imagens dentro da pasta do projeto (a pasta que contém as pastas src, bin, .settings)?

Nissin, não use o “/” para separar seus diretórios. Deixe que o Java faça isso, portanto, use File.separator. Procure usar algo como System.getProperty(“user.dir”) para pegar suas imagens, mas senão, como disseram, apenas declare o nome da sua imagem e a coloca na raiz do seu projeto quando for gerar o JAR. Assim, ele encontra ela tranquilamente :slight_smile:

Abraços.

nissivm

E como eu coloco as imagens na raiz do meu projeto?

nissivm

Coloquei as imagens soltas dentro da pasta do projeto (onde estão as pasta bin, src), coloquei só o nome das imagens dentro de new File(), roda no Eclipse, mas após transformar em jar não roda… :frowning:

nissivm

markinlelo:
add as imagens no claspath do projeto ou trabalhe com endereço relativo para as imagens

exemplo:

Index.this.pergaminhos[0] = new File(".\imagens\pergaminho1.png");

ai vc manda a pasta imagens junto com o JAR

Você está falando do arquivo .classpath ? Como adiciono as imagens nele?

L

nel:
nissivm:
Far.ST:
O fato de funcionar no seu computador é pq lá vc tem as imagens.

Jogue todas estas imagens para dentro do seu projeto antes de criar o .jar, é provável que resolva.

E troque ao invés do caminho c:… por apenas “imagem.jpg”, tendo em vista que elas estarão dentro do projeto não precisa especificar o lugar onde as mesmas estão.

Tenho que colocar a pasta das imagens dentro da pasta do projeto (a pasta que contém as pastas src, bin, .settings)?

Nissin, não use o “/” para separar seus diretórios. Deixe que o Java faça isso, portanto, use File.separator. Procure usar algo como System.getProperty(“user.dir”) para pegar suas imagens, mas senão, como disseram, apenas declare o nome da sua imagem e a coloca na raiz do seu projeto quando for gerar o JAR. Assim, ele encontra ela tranquilamente :slight_smile:

Abraços.

PQ NÃO MALUCO !!!

Tem algo de errado usar /…

se liga !!!

nel

lokit"s:
nel:
nissivm:
Far.ST:
O fato de funcionar no seu computador é pq lá vc tem as imagens.

Jogue todas estas imagens para dentro do seu projeto antes de criar o .jar, é provável que resolva.

E troque ao invés do caminho c:… por apenas “imagem.jpg”, tendo em vista que elas estarão dentro do projeto não precisa especificar o lugar onde as mesmas estão.

Tenho que colocar a pasta das imagens dentro da pasta do projeto (a pasta que contém as pastas src, bin, .settings)?

Nissin, não use o “/” para separar seus diretórios. Deixe que o Java faça isso, portanto, use File.separator. Procure usar algo como System.getProperty(“user.dir”) para pegar suas imagens, mas senão, como disseram, apenas declare o nome da sua imagem e a coloca na raiz do seu projeto quando for gerar o JAR. Assim, ele encontra ela tranquilamente :slight_smile:

Abraços.

PQ NÃO MALUCO !!!

Tem algo de errado usar /…

se liga !!!

Qual a sua experiência com desenvolvimento? Uma semana?
Só programa para Windows, por acaso? Acha que existe o File.separator para bonito?
O pessoal do Java não tinha mais o que fazer, e criaram essa variavél na classe File né?

Amigo, pense, reflita e principalmente saiba usar as palavras antes de desferir as mesmas.
Existe diferença no reconhecimento de diretório por parte do S.O. É bem provavél que o / barra seja reconhecido em um S.O e não em outro.
Justamente para evitar esse tipo de problema, existe o File.separator. Não disse que é proibido usar desse forma, o que fiz foi uma recomendação.

O Java é para ser multiplataforma, mas se todo programador pensar igual a você, vai programar só para um S.O mesmo.
Abraços.

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?

nel

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?

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.

nissivm

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.

nel

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

Abraços.

nissivm

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:

nel

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.

nissivm

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)?

nel

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!

nissivm
  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.

nel

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!

nissivm

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…


nel

É 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.

nissivm
  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);
	}

}
Criado 24 de junho de 2011
Ultima resposta 24 de jun. de 2011
Respostas 31
Participantes 6