Ausführen eine andere Jar-Datei aus einem anderen java-Programm

Als ein Teil von meinem Programm, ich habe eine connections-manager, die Sie empfängt, eine Verbindung von einem client, und dann gibt der client eine port-Nummer und ein Kennwort zum herstellen der Verbindung. Ein dieser Stelle der manager braucht, um die jar-Datei habe ich zum behandeln dieser verbindungen mit ein paar Argumente, und weiter, und ignoriert, was das Programm tut).

Mein problem wurde mit dem ausführen der jar-Datei. Ich habe nachgeschaut ähnliche Frage und habe versucht mit eine process builder und mit Laufzeit.exec. Ich zog um die jar-Datei und überprüft die Berechtigungen. Es ist einfach die Arbeit verweigern, aus einem anderen java-Programm, arbeitet aber perfekt von der Befehlszeile aus. Hier ein Beispiel von einem meiner Testläufe.

package test;

import java.io.*;

public class Main {
    public static void main (String [] args ) throws IOException, ClassNotFoundException, InterruptedException {
        Process p = Runtime.getRuntime().exec("java -jar \'/home/ryan/CytoscapeInterface.jar" +
        "\' arg1 arg2");
        //Process builder way
        /*ProcessBuilder pb = new ProcessBuilder("/home/ryan/CytoscapeInterface.jar",
           "-jar", "CytoscapeInterface.jar", "agr1", "arg2");
        pb.redirectErrorStream();
        Process p = pb.start();*/
        BufferedInputStream bis = new BufferedInputStream(p.getErrorStream());
        synchronized (p) { p.waitFor(); }
        System.out.println(p.exitValue());//its 1 for runtime, 2 for process Builder
        int read = bis.available();
        //had a loop, found out I just needed to go through once
        byte[] b = new byte [read];
        bis.read(b);
        read = bis.available();
        bis.close();
        FileOutputStream fos = new FileOutputStream (new File("/home/ryan/Desktop/FileTest.txt"));
        fos.write(b);//Writes error file
        fos.close();
    }
}

waitFor-Anweisung gibt 1 zurück, für die Laufzeit und 2 für den generator. Die Fehler-Ausgabe für die Laufzeit ist "Unable to access (jar-Datei) '/home/ryan/CytoscapeInterface.jar'. Während Sie mit dem builder gibt ein paar Zeilen der Fehler, hatte einige seltsame Zeichen, der erste Fehler war, dass der Befehl nicht gefunden.

InformationsquelleAutor Ryan | 2011-07-06
Schreibe einen Kommentar