[RESOLVIDO] Pegar endereço do JAR da própria aplicação

Olá :slight_smile:

Bom, gostaria de saber como eu posso pegar o endereço da própria aplicação, da pasta que está o jar. Ja pesquisei bastante, e só consegui achar os métodos System.getProperty(“user.dir”), e new File("").getPath. O problema é que eu chamo esse jar de um outro programa, e os metodos descritos pegam o caminho do programa que chama, e não da propria aplicação.

Não sei se consegui ser claro, vou dar um exemplo:

O programa se encontra em Templates/Funcenter/jogos/Aplicativo.jar
O programa que chama essa aplicação se encontra em Templates/Funcenter

Dai, quando é chamado o System.getProperty(“user.dir”) no Aplicativo.jar, ele retorna Templates/Funcenter, ao inves de Templates/Funcenter/jogos/ (Que seria o que eu quero). Mas se eu executar a aplicação diretamente pela pasta, ele pega certo.

Não existe um outro método que faça pegar o diretório certo? Obrigado.

Não entendi, você quer executar o jogo.jar indiretamente por outro .jar ?

Não. Eu ja estou executando, não é esse o problema. O problema é que o System.getProperty(“user.dir”) retorna o endereço de onde a aplicação foi chamada, e não de onde ela fica.

Por exemplo, se eu estiver em /home/arthur/ e executar o comando:

java -jar Templates/Funcenter/jogos/Aplicacao.jar, o System.getProperty(“user.dir”) irá retornar /home/arthur, que é o endereço de onde eu chamei o jar. Mas eu quero que ele retorne /home/arthur/Templates/Funcenter/jogos/, que seria onde o JAR esta localizado, entendeu?

Ja tentei com o new File("").getPath, e deu na mesma.

import java.io.File;   
public class CurrentDir {   
   public static void main (String args[]) {   
     File dir1 = new File (".");   
     File dir2 = new File ("..");   
     try {   
       System.out.println ("Current dir : " + dir1.getCanonicalPath());   
       System.out.println ("Parent  dir : " + dir2.getCanonicalPath());   
       }   
     catch(Exception e) {   
       e.printStackTrace();   
       }   
     }   
}  

Valeu guilherme. Funcionou perfeitamente :smiley:

[code]private void Manual(java.awt.event.ActionEvent evt) {                                           
        /* ABRINDO ARQUIVO PDF */  
        try {  
            Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL "+getClass().getResource("/documentos/java.pdf"));   
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    } [/code]

No local de PDF, coloque seu jar

Guilherme, há outro meio de rodar um jar dentro da aplicação

Estou com o mesmo porém

Outra dúvida:

Runtime.getRuntime().exec("java -jar /jogos/Aplicativo.jar");

Como eu faço pra verificar se o comando foi rodado corretamente, sem erros?

[quote=Arthur.hvt]Outra dúvida:

Runtime.getRuntime().exec("java -jar /jogos/Aplicativo.jar");

Como eu faço pra verificar se o comando foi rodado corretamente, sem erros?[/quote]

Se o “Aplicativo.jar” for aberto, então está rodando, obviamente…ou então faça um:

try
{
   Runtime.getRuntime().exec("java -jar/jogos/Aplicativo.jar");
}
catch(Exception e)
{
   javax.swing.JOptionPane.showMessageDialog(this,"ERRO","ERRO",javax.swing.JOptionPane.ERROR_MESSAGE);
}

Se o JOptionPane aparecer, ocorreu um erro…

Não da certo. Não ocorre nenhuma exceção quando não acha Aplicativo.jar, por exemplo.