# externe Anwendung aufrufen und sich selbst beenden



## ExZtEd (6. Jun 2007)

Hallo zusammen,

leider habe ich nach langem suchen nichts gefunden, was genau mein vorhaben abdeckt.
Ich hoffe hier entweder gute oder schlechte Nachrichten zu lesen, ob und wie ich dies bewerkstelligen kann.
Fragen zum aufrufen externer Anwendungen gibt es viele. Antworten darauf natürlich auch.

Nun zum speziellen Fall:

Java-Applikation a (jar) soll Java-Applikation b (jar) starten, aber nicht selber die Prozesskontrolle übernehmen.
Das aufrufen externer Anwendungen ist natürlich keinerlei Problem, leider habe ich aber noch keine Möglichkeit gefunden, ähnlich wie in Linux, eine externe Anwendung im Hintergrund zu starten, und somit die Prozesskontrolle abzugeben, um sich z.B. selber zu beenden.

In diesem Fall soll nämlich Java-App a -> Java-App b starten und sich dann selbst beenden, ohne Java-App b terminieren zu müssen.

Schonmal vielen Dank im voraus,
ExZtEd


----------



## ExZtEd (6. Jun 2007)

Sorry, eine ganz wichtige Information vergessen:
Natürlich geht es hier um zwei java-Apps die unter Windows laufen sollen.


----------



## Wildcard (6. Jun 2007)

über 'start' ....


----------



## ExZtEd (6. Jun 2007)

Leider funktioniert dies nicht wie gewünscht...

Weder ein aufruf der Form "cmd /c start pragramm_a," noch der aufruf einer batchdatei, welche ein start absetzt, lässt das aufrufende "programm_a" sich selber beenden.
Applikation a verhält sich leider weiterhin so, wie wenn es auf Subprozesse oder Threads wartet, bis sie abgearbeitet wurden. Erst dann beendet es sich auch selber.

Als Beispiel z.B. Runtime.getRuntime().exec("cmd /c start notepad").
Erst wenn ich das Notepad wieder schließe, beendet sich auch die Java-Anwendung.


----------



## Wildcard (6. Jun 2007)

Hmm. Ich dachte eigentlich das es so funktionieren sollte, aber überprüfen kann ich's leider nicht, hab kein Windows...


----------



## Murray (7. Jun 2007)

ExZtEd hat gesagt.:
			
		

> Als Beispiel z.B. Runtime.getRuntime().exec("cmd /c start notepad").
> Erst wenn ich das Notepad wieder schließe, beendet sich auch die Java-Anwendung.



Das stimmt so nicht; folgendes Programm terminiert bei mir sofort nach dem Start von Notepad (und nicht erst, nachdem Notepad wieder beendet wurde):


```
public class Exec {

	public static void main( String[] args) {
	
		try {
			Runtime.getRuntime().exec( "cmd /c start notepad");
		} catch ( Exception e) {
			e.printStackTrace();
		}
		
	}
}
```

Das funktioniert sogar ohne cmd und ohne start; ein einafches exec( "notepad.exe") verhält sich ebenso.

Möglicherweise läuft in deinem Programm noch irgendein anderer (Non-Daemon-)Thread, auf den die VM noch wartet? 
Hast du mal einen Thread-Dump gemacht (im Konsolenfenster Strg-Pause drücken) ?


----------



## ExZtEd (7. Jun 2007)

Danke für die Unterstützung, bzw. das Gegentesten.

Bin das Problem von der falschen Seite angegangen.
Nicht die Application war das Problem, sondern das Runtime-Environment der IDE Eclipse.

Habe ganz vergessen, dass alles was im Debug des Eclipse gestartet wird, auch wieder beendet werden muss, damit auch das Debugging wieder anhält.

Ein Export der Applikation als JAR, lässt es unabhängig der IDE natürlich problemlos laufen und es verhält sich wie erwünscht.


Danke nochmals an euch.  :applaus: 

Edit:
Kann leider keinen Haken setzen, weil erstes Post als "Nicht-Registrierter"


----------



## Wildcard (7. Jun 2007)

Haken ist gesetzt, aber ich verstehe nicht wirklich was du meinst.
Auf im debug mode wird die Anwendung ganz normal terminiert.


----------



## ExZtEd (7. Jun 2007)

Wie gesagt bei mir leider nicht.
Erst wenn ich das Notepad-Fenster oder jede andere Anwendung die ich per exec() im Debug von Eclipse schließe, dann beendet sich auch erst der Debug.

Ich gehe mal davon aus, dass Die Application schon terminiert, aber der Debug der IDE erst stoppt wenn alle "Childs" terminiert wurden, sprich auch das besagte Notepad.


----------

