Was ist der beste Weg, um eine Java-Anwendung mit Code zu beenden?
Was ist der beste Weg, um eine Java-Anwendung mit Code zu beenden?
Antworten:
Sie können System.exit()für diesen Zweck verwenden.
Laut der Java 8-Dokumentation von oracle:
public static void exit(int status)Beendet die aktuell ausgeführte Java Virtual Machine. Das Argument dient als Statuscode. Gemäß der Konvention zeigt ein Statuscode ungleich Null eine abnormale Beendigung an .
Diese Methode ruft die Exit-Methode in der Klasse Runtime auf. Diese Methode wird nie normal zurückgegeben.
Der Anruf
System.exit(n)entspricht effektiv dem Anruf:
Runtime.getRuntime().exit(n)
System.exit(0);
Die "0" zeigt jedem, der Ihr Programm aufgerufen hat, an, dass alles in Ordnung war. Wenn Sie jedoch aufgrund eines Fehlers beenden, sollten Sie System.exit(1);oder mit einer anderen Zahl ungleich Null, die dem spezifischen Fehler entspricht.
Wie andere bereits erwähnt haben, räumen Sie zuerst auf! Dazu müssen Dateien und andere offene Ressourcen geschlossen werden.
System.exit(1)(oder eine andere Nummer), wenn Sie angeben möchten, dass es aufgrund eines Fehlers geschlossen wurde. System.exit(0)zeigt an, dass das Programm normal geschlossen wurde. Sie können 1 auch in eine beliebige Zahl ändern. Wenn Sie Ihre Anwendung über ein Skript ausführen, können Sie feststellen, ob ein Fehler aufgetreten ist.
System.exit() ist normalerweise nicht der beste Weg, aber es hängt von Ihrer Anwendung ab.
Die übliche Art, eine Anwendung zu beenden, besteht darin, die main()Methode zu beenden . Dies funktioniert nicht, wenn andere Nicht-Deamon-Threads ausgeführt werden, wie dies für Anwendungen mit einer grafischen Benutzeroberfläche (AWT, Swing usw.) üblich ist. Für diese Anwendungen finden Sie entweder eine Möglichkeit, die GUI-Ereignisschleife zu beenden (Sie wissen nicht, ob dies mit AWT oder Swing möglich ist) oder aufzurufen System.exit().
Die Verwendung dispose();ist eine sehr effektive Methode zum Schließen Ihrer Programme.
Ich habe festgestellt, dass durch die Verwendung das System.exit(x)Zurücksetzen des Interaktionsbereichs und die Annahme, dass Sie einige der dort benötigten Informationen benötigen, alles verschwindet.
Ich stimme Jon zu, lasse deine Anwendung auf etwas reagieren und rufe System.exit () auf.
Sei sicher, dass:
Die Antwort lautet System.exit (), ist aber keine gute Sache, da dies das Programm abbricht. Eine Reinigung, Zerstörung, die Sie beabsichtigen, wird nicht stattfinden.
Es gibt zwei einfache Antworten auf die Frage.
Dies ist der "professionelle Weg":
//This just terminates the program.
System.exit(0);
Dies ist ein ungeschickterer Weg:
//This just terminates the program, just like System.exit(0).
return;
System.exit(0); return;ist auch gut, die Rückgabe verhindert, dass ein anderer Code ausgeführt wird, bevor das System beendet werden kann, andernfalls benötigen Sie ein Flag (..i.e. if (!called_exit) { further code after exit statement }
Runtime.getCurrentRumtime().halt(0);
halt: "Diese Methode sollte mit äußerster Vorsicht verwendet werden. Im Gegensatz zur exitMethode führt diese Methode nicht zum Starten von Shutdown-Hooks und führt keine nicht aufgerufenen Finalizer aus, wenn Finalization-on-Exit aktiviert wurde. Wenn die Shutdown-Sequenz aktiviert ist Diese Methode wurde bereits initiiert und wartet nicht darauf, dass laufende Shutdown-Hooks oder Finalizer ihre Arbeit beenden. " Kurz gesagt, Sie sollten nicht verwenden müssen halt, sollten Sie bevorzugen exit.
System.exit()wird tun was du willst. In den meisten Situationen möchten Sie jedoch wahrscheinlich einen Thread beenden und den Hauptthread am Leben lassen. Auf diese Weise können Sie eine Aufgabe beenden, aber auch die Möglichkeit behalten, eine andere Aufgabe zu starten, ohne die App neu zu starten.
System.exit (ABORT); Beenden Sie den Vorgang sofort.
Dies sollte auf die richtige Weise geschehen:
mainFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
mainFrame.addWindowListener(new WindowListener() {
@Override
public void windowClosing(WindowEvent e) {
if (doQuestion("Really want to exit?")) {
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.dispose();
}
}