So beenden Sie eine Java-App aus dem Programm heraus

145

Was ist der beste Weg, um eine Java-Anwendung mit Code zu beenden?

Olaseni
quelle
1
Hmm. Ich denke, die Frage ist möglicherweise zu allgemein. Unter welchen Umständen aufhören?
Allen George
3
Lassen Sie alle Ihre Nicht-Daemon-Threads normal beenden?
Thorbjørn Ravn Andersen

Antworten:

192

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)

Jon
quelle
102
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.

Chris Cooper
quelle
Ich dachte es wäre System.exit (1)?
AFK
14
Wie Chris feststellt 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.
StormPooper
10

System.exit(int i)ist zu verwenden, aber ich würde es in eine allgemeinere shutdown()Methode aufnehmen, in der Sie auch "Bereinigungs" -Schritte einschließen, Socket-Verbindungen schließen, Dateideskriptoren erstellen und dann mit beenden System.exit(x).

Bastien
quelle
6

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().

Christian Semrau
quelle
4

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.

Joshua
quelle
3

Ich stimme Jon zu, lasse deine Anwendung auf etwas reagieren und rufe System.exit () auf.

Sei sicher, dass:

  • Sie verwenden den entsprechenden Exit-Wert. 0 ist normaler Exit, alles andere zeigt an, dass ein Fehler aufgetreten ist
  • Sie schließen alle Eingabe- und Ausgabestreams. Dateien, Netzwerkverbindungen usw.
  • Sie protokollieren oder drucken einen Grund für das Beenden, insbesondere wenn dies auf einen Fehler zurückzuführen ist
Freiheit
quelle
2

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.

Vaishak Suresh
quelle
1

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;
Anton
quelle
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 }
ycomp
-1
Runtime.getCurrentRumtime().halt(0);
Alter Bro
quelle
1
Besser: Runtime.getRuntime (). Halt (0); Hat bei Scala perfekt für mich funktioniert!
Gerhard Hagerer
@GerhardHagerer aber was ist wenn du das nicht aktuelle runti bekommst, ich?
Dude Bro
1
Aus dem Javadoc für 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.
Erwin Bolwidt
-1

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.

SmartFingers
quelle
-3

System.exit (ABORT); Beenden Sie den Vorgang sofort.

pooploser0110
quelle
Es gibt keine Variable wie ABORT.
Alfonso Vergara
-3

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();
    }
}
user3596517
quelle