Meu arquivo jar não abre em outro computador

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

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

vc rodou via eclipse e funfa normal?

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…

[quote=lokit"s]vc rodou via eclipse e funfa normal?

[/quote]

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…

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

[code]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"));[/code]

são caminhos de imgens suas certo…

por isso não vai rodar mesmo!!

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

}

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

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

opa… markinlelo falou exatamente o q falei =p

crie uma pasta chamada images

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

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

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

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.

[quote=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.[/quote]

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

[quote=nissivm][quote=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.[/quote]

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

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.

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

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:

[quote=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[/quote]

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

[quote=nel][quote=nissivm][quote=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.[/quote]

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

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.[/quote]

PQ NÃO MALUCO !!!

Tem algo de errado usar /…

se liga !!!

[quote=lokit"s][quote=nel][quote=nissivm][quote=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.[/quote]

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

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.[/quote]

PQ NÃO MALUCO !!!

Tem algo de errado usar /…

se liga !!![/quote]

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.

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?