Runtime.getRuntime().exec()

Galera,

Preciso executar um .jar a partir da minha aplicação. Tenho algumas dúvidas quanto ao uso do Runtime.getRuntime().exec():

  1. Em que diretório estou ao executá-lo? Sempre no diretório do usuário?

  2. Como faço para executar um jar que fica no diretório da aplicação, visto que tentei assim e não deu:

Runtime.getRuntime().exec("cd " + diretorio);
Runtime.getRuntime().exec("java -jar MeuJar.jar");
  1. Há alguma outra forma sem ser usando este comando?

Obrigado!!!

Cara, acho que você deve colocar o path inteiro.
Então, se você está na pasta MeuJava, você faz:

Runtime.getRuntime().exec("java -jar /home/usr/seuUsuario/MeuJar.jar");

O comando ali dentro acredito que esteja certo. Se não der, troque java -jar por start, mas acho que assim é mais provável que funcione.

Eu não sei se funciona mas você pode usar um Array de comandos

String[] cmds = {("cd"+diretorio),"java -jar MeuJar.jar"};
try{
Proccess p = Runtime.getRuntime().exec(cmds);
Scanner sc = new Scanner(p.getOutputStream());
while(sc.hasNext())
System.out.println(sc.nextLine());
}catch(Exception e){
e.printStackTrace();
}

Galera,

Obrigado pela ajuda. Resolvi assim:

String home;		
		
	// Verifica SO
        if (System.getProperty("os.name").contains("Windows"))
        {
            home = System.getProperty("user.home") + "\\";
        }
        else
        {
            home = System.getProperty("user.home") + "/";
        }
        
        String comando = home + "MeuJar.jar";
                        
       try 
       {    	   
    	   Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL "+comando);
       } 
       catch (IOException e) 
       {
    	   e.printStackTrace();
       }

Valeu e bom dia a todos!!!

Acho que você poderia fazer assim para obter o camino completo:

       String home = System.getProperty("user.home") + File.separator + "MeuJar.jar";   
                           
       try   
       {             
           Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL "+comando);   
       }   
       catch (IOException e)   
       {   
           e.printStackTrace();   
       }  

Mas pelo que sei esse comando no exec roda soh em Windows…