Correr outro program .jar

7 respostas
S

Ola eu gostava de saber como correr outro programa .jar eu estou a usar isto :

try {
            System.out.println(System.getProperty("user.dir")+"\\informationsender.jar");
            // TODO add your handling code here:
            Runtime r = Runtime.getRuntime();
            Process p = r.exec(System.getProperty("user.dir")+"\\informationsender.jar");
            p.waitFor();
        } catch (InterruptedException ex) {
            Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
        }
o autoput é :

[color=red]C:\Documents and Settings\Utilizador\Os meus documentos\NetBeansProjects\Configurador de backups\informationsender.jar

19/Ago/2009 10:42:15 NewJFrame jButton1ActionPerformed

SEVERE: null

java.io.IOException: Cannot run program C:\Documents”: CreateProcess error=2, O sistema não conseguiu localizar o ficheiro especificado

at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)

at java.lang.Runtime.exec(Runtime.java:593)

at java.lang.Runtime.exec(Runtime.java:431)

[/color]

nao sei porque ele so le ate aos [color=red]Cannot run program C:\Documents [/color] porque não aceita o resto do path?

7 Respostas

G

O problema pode ser o espaço existente no caminho do arquivo.
Tenta colocar entre aspas simples, talvez resolva

Process p = r.exec("'"+System.getProperty("user.dir")+"\\informationsender.jar'");
S

Continua a dar o mesmo erro :frowning: e nao encontro maneira de o resolver

G

Olá amigo,

Tente o seguinte código:

String caminhoDinamico = System.getProperty("user.dir");
Runtime r = Runtime.getRuntime();
Process p = r.exec("Rundll32 SHELL32.DLL,ShellExec_RunDLL "+caminhoDinamico+"\\SeuJar.jar");

Abraços

S

Ola :smiley: depois varias tentativas e de juntar a informação que me foi dada aqui consegui :smiley:

pra correr aplicações exteriores e ignorar os espaços cá vai o código

String caminhoDinamico = "\""+System.getProperty("user.dir");
Runtime r = Runtime.getRuntime();
Process p = r.exec("Rundll32 SHELL32.DLL,ShellExec_RunDLL "+ caminhoDinamico+"oseujar.jar\"");
p.waitFor();

cuidado pra ele ignorar os espaços tem de usar as " e ter ainda mais cuidado ao usar o comando System.getProperty(“user.dir”) porque ele devolve o caminho do sitio onde esta a ser corrido agora imaginem que a voça outra aplicação vai saber onde esta a ser a corrida tambem e usar isso pra procura de ficheiros pode não ser a melhor forma.

Polimorphism

Sou leigo no assunto, mais não se deveria usar uma classe file?

S

eu tmb sou leigo no assunto tenho aprendido muito aqui com eles mas sei que é uma das formas que funciona.
:smiley:

S

ok no projecto que estou a desenvolver descubri que usar o codigo postado a cima nao é o mais apropriado.

Este codigo devolve o path correto de onde se encontra a sua aplicação independentemente de onde a esta a correr.

private String Getwd() {
        String applicationDir = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
        if (applicationDir.endsWith(".jar")) {
            applicationDir = new File(applicationDir).getParent();
        } else {
            // Add the path to the class files
            applicationDir += getClass().getName().replace('.', '/');

            // Step one level up as we are only interested in the
            // directory containing the class files
            applicationDir = new File(applicationDir).getParent();
        }
        String[] temp = applicationDir.split("%20");
        String path="";
        for (int i = 0; i < temp.length; i++) {
            if (i == temp.length - 1) {
                path = path + temp[i];
            } else {
                path = path + temp[i] + " ";
            }

        }
        return path;
    }
Criado 19 de agosto de 2009
Ultima resposta 26 de ago. de 2009
Respostas 7
Participantes 4