Java Programm aus Java Programm starten

Grizzly

Top Contributor
Hallo zusammen,

vor kurzem bin ich über die Klasse [JAPI]java.lang.Compiler[/JAPI] gestolpert. Gibt es sowas eigentlich auch um ein Java Programm aus meinem aktuellen Java Programm heraus auszuführen?

Alternativ müsste ich selber die aktuelle JRE herausfinden (sprich den Pfad) und diese dann entsprechend über die exec-Methode der Klasse [JAPI]java.lang.Runtime[/JAPI] starten (wie im Beispiel von McDowell am Ende der Seite hier).

Da wäre es schöner, wenn es da schon eine Standard Klasse dafür geben würde. Allerdings habe ich bei meinen bisherigen Suchen leider nichts gefunden. Aber vielleicht habe ich auch nur nach den falschen Begriffen gesucht...

Was zu dem Thema jemand etwas?
 
Um ein Java-Programm aus einem anderen Java-Programm heraus zu starten benutzt du einfach dessen main()-Methode.

Bsp.
Java:
MeineKlasse.main(null); //ohne Argumente
MeineKlasse.main(new String[] {"Argument1", "Argument2"}); //mit Argumenten
 
Um ein Java-Programm aus einem anderen Java-Programm heraus zu starten benutzt du einfach dessen main()-Methode.

Bsp.
Java:
MeineKlasse.main(null); //ohne Argumente
MeineKlasse.main(new String[] {"Argument1", "Argument2"}); //mit Argumenten

Ähm, okay. Ich hätte mich etwas besser (bzw. präziser) ausdrücken sollen. ;-)
Ich möchte das Programm schon in ein eigenen JVM laufen lassen. Also nicht direkt (in der gleichen JVM) aufrufen noch über einen ClassLoader dynamisch nachladen und dann aufrufen. Hätte auch noch den netten Nebeneffekt, dass ich die Ausgabe des aufgerufenen Programms abfangen und mitloggen könnte, ohne dabei die Ausgabe des aufrufenden Programms verbiegen zu müssen.
 
@Hoax: Das musst du mir jetzt mal erklären: Wann wird eine NPE geworfen, wenn das Argument gar nicht weiter benutzt bzw. darauf zugegriffen wird?
Ich gebe dir zwar Recht; wenn man das zweite Programm nicht kennt, kann das Probleme machen, wenn die Argumente im zweiten Programm nicht korrekt verarbeitet werden.
Dennoch bin ich der Meinung, dass wenn ich keine Argumente zur Übergabe habe, ich dann eben auch null (nichts) übergebe. Ein leeres String-Array zu übergeben halte ich nicht für besonders elegant.

@Grizzly, dann kannst du über [JAPI]Runtime[/JAPI] deinen Startbefehl absetzen.
 
@Grizzly, dann kannst du über [JAPI]Runtime[/JAPI] deinen Startbefehl absetzen.

Genau das war meine Frage: Gibt es speziell für das Aufrufen von Java Programme schon eine Klasse oder Methode in den Java Standard Klassen? Sprich die einem das auffinden des JRE erspart. Denn rein theoretisch könnte die aktuelle JVM ja wissen in welcher JRE sie läuft. Also intern wird sie das sicher auch. Die Frage ist, ob ich aus meinem Programm ebenfalls irgendwie Zugriff auf diese Informationen (oder entsprechende Funktionalitäten) habe.

Das Beispiel, auf das ich in meinem ersten Post verlinkt habe, macht dies über die System Eigenschaften os.name, java.home und die Annahme, dass unter Windows Java über bin\java.exe und unter allen anderen System über bin/java gestartet werden kann. Netterweise wird am Ende noch geprüft, ob dort auch wirklich das Executable von Java liegt. So etwas gebündelt in einer Java Standard Klasse, ähnlich wie [JAPI]java.util.Compiler[/JAPI], wäre echt super.
 
Ja, natürlich ... schau mal da nach, da müsste ein Property dabei sein, was den Pfad zur aktuell benutzten JRE enthält:
Java:
Properties env = System.getProperties();
	        Enumeration keys = env.keys();
	        PrintStream out = System.out;
	        while (keys.hasMoreElements()) {
	            String key = (String) keys.nextElement();
	            String value = env.getProperty(key);
	            out.println(String.format("%s = %s", key, value));
	        }
 

Zurück
Oben