2016-06-06 8 views
0

Ich möchte einen Prozess aufrufen, der unabhängig vom ursprünglichen Prozess ist. Also könnte ich Runtime verwenden. Runtime.getRuntime().exec("java -Xms256M -Xmx256M -jar /home/HauptServer/Games/game1/cloud.jar -p "+port), aber dies wird nicht das Arbeitsverzeichnis festlegen. Also habe ich ProcessBuilder versucht: ProcessBuilder prb = new ProcessBuilder("java","-Xms256M","-Xmx256M","-jar","cloud.jar","-p",""+port).directory(new File("/home/HauptServer/Games/game1")); aber in diesem Fall läuft es nicht unabhängig von meinem ursprünglichen Prozess. Haben Sie irgendwelche Lösungen?Wie kann ich einen unabhängigen Prozess mit ProcessBuilder erstellen oder das Arbeitsverzeichnis mit exec() setzen

Antwort

0

Verwenden Runtime.getRuntime().exec(String[] cmdarray, String[] envp, File dir)

Vom documentation

Executes the specified command and arguments in a separate process with the specified environment and working directory.

Verwenden Sie keine einzige Zeile Befehl (java -jar ...). Verwenden Sie die cmdarray[] und geben Sie bei dir das Arbeitsverzeichnis

Beispiel

String cmdArray[] = new String[7]; 
cmdArray[0] = "java"; 
cmdArray[1] = "-Xms256M"; 
cmdArray[2] = "-Xmx256M"; 
cmdArray[3] = "-jar"; 
cmdArray[4] = "/home/HauptServer/Games/game1/cloud.jar"; 
cmdArray[5] = "-p"; 
cmdArray[6] = port; 
+0

Vielen Dank für Ihre Antwort! Aber der Prozess ist immer noch ein Kind-Prozess des Originals und ich bekomme diesen Fehler: java.security.AccessControlException: Illegale Thread Group Access in dieser Zeile, wo ich den Prozess gestartet: 'Process pr = Runtime.getRuntime(). Exec (cmdArray, null, neue Datei ("/ home/HauptServer/Games/game1")); ' –

+0

Die Ausführung hängt von Ihrem Hauptprozess ab. Einige Dinge können nicht geändert werden, wie der Benutzer, der den Prozess startet. Sie sind berechtigt, in der Sicherheitsrichtlinie ausgeführt zu werden? Es erlaubt Ihnen, andere Prozesse nicht Java zu laufen? – pedrofb

+0

Ich weiß nicht .... –

Verwandte Themen