# Neustart des Programms



## Maddili (19. April 2010)

Hi, 

kann mir bitte jemand sagen, ob es einen Befehl gibt, mit dem ich mein Programm zuerst beende und dann neu aufrufe
Oder auch ein Befehl, um den "Ursprungszustand" herzustellen.

mfg
Maddin

ps:  Was macht System.exit(0)?  Schließt der Befehl nur das Fenster, oder bricht mein Programm hier einfach ab?


----------



## swas (19. April 2010)

Hi,

schaumal hier Java Application and self-restart oder hier Programmneustart.

System.ext(0) beendet, soweit ich weiß, die JavaVM direkt d.h. die VM wird einfach gekillt. Vergleichbar mit Stromstecker vom PC ziehen. (Bitte korrigieren falls ich falsch liege.)

mfg,


----------



## mccae (20. April 2010)

Also,

Bei einem gut strukturierten Programm, kann man benutzte Ressourcen entladen sowie alles abbauen und danach nochmals die main(String[]args) Methode aufrufen.

Man sollte jedoch bedenken, dass bei dieser Methode bei jedem Start der Aufrufstack wächst (main ruft main ruft main ruft main).
Deshalb ist dies nicht für all zu viele Aufrufe geeignet.


Eine weitere Methode wäre das Starten in einem seperaten Prozess, wobei die JVM auch nach System.exit(0) nicht herunterfährt, wenn ein Subprocess läuft.

Das heißt, die Parent VM wird erst aufhören, wenn der ChildProcess beendet wurde (Und wiederum auch dessen Childprocesses usw.).


Weiters kann man einen Prozess mit einem Command starten, der diesen ein einem seperaten Prozess ausführt.
Bei dieser Methode muss man für jedes BS eine Version anlegen.
Unter Windows könnte dies "C:\WINXP\system32\cmd.exe /c C:\WINXP\system32\cmd.exe \k java -jar meineJar.jar" sein (Es existiert aber auch die Möglichkeit einen Prozess über rundll32 zu starten).


Die beste Art dieses Problem zu lösen, ist in meinen Augen ein gut sturkturiertes Programm welches nach Abbau der Ressourcen die eigene main Methode aufruft, oder gar den Applikationszustand selbst zurücksetzen kann.

mfg
Martin


----------

