2012-11-13 12 views
26

Was ist der Unterschied zwischen diesen beiden Methoden - System.exit() und JFrame.dispose()?JFrame.dispose() vs System.exit()

Wenn wir eine Java Swing-Anwendung schließen möchten, wenn auf eine Schaltfläche geklickt wird, welche Methode sollte ich verwenden?

+0

verwenden auf Klicken Sie auf die Schaltfläche. ist über Standalone JButton mit System.exit (0) oder von Button in JFrames ToolBar – mKorbel

+0

@mKorbel: erste Option – Adil

Antwort

46

System.exit(); bewirkt, dass die Java VM vollständig beendet wird.

JFrame.dispose(); bewirkt, dass das JFrame Fenster vom Betriebssystem zerstört und bereinigt wird. Laut der documentation kann dies dazu führen, dass die Java-VM beendet wird, wenn kein anderes Windows verfügbar ist. Dies sollte jedoch nur als Nebeneffekt und nicht als Norm angesehen werden.

Der von Ihnen gewählte hängt wirklich von Ihrer Situation ab. Wenn Sie alles in der aktuellen Java-VM beenden möchten, sollten Sie System.exit() verwenden und alles wird bereinigt. Wenn Sie nur das aktuelle Fenster löschen möchten, mit dem Nebeneffekt, dass die Java VM geschlossen wird, wenn dies das einzige Fenster ist, verwenden Sie JFrame.dispose().

+0

Das Problem sehe ich mit System.exit ist, dass es wirklich die Anwendung tötet, auch wenn ein Thread, zum Beispiel, schreibt eine Datei. Es scheint mir, dass die meisten Anwendungen das Fenster schließen, als bis der Rest der Threads fertig ist. Da die AWT-Threads möglicherweise nicht vollständig sind, haben wir ein Problem, wie Sie dies in Java richtig implementieren können. –

10

JFrame.dispose()

public void dispose() 

Releases alle nativen Bildschirm Ressourcen durch dieses Fenster verwendet, dessen Subkomponenten, und alle von den unternehmenseigenen Kinder. Das bedeutet, dass die Ressourcen für diese Komponenten zerstört werden. Der von ihnen verbrauchte Speicher wird an das Betriebssystem zurückgegeben und als nicht wiedergabebereit markiert. Das Fenster und seine Unterkomponenten können erneut angezeigt werden, indem die systemeigenen Ressourcen mit einem nachfolgenden Aufruf zum Packen oder Anzeigen neu erstellt werden. Die Zustände des neu erstellten Fensters und seiner Unterkomponenten sind mit den Zuständen dieser Objekte an dem Punkt identisch, an dem das Fenster angeordnet wurde (ohne zusätzliche Änderungen zwischen diesen Aktionen zu berücksichtigen).

Hinweis: Wenn das letzte anzeigbare Fenster in der Java Virtual Machine (VM) gelöscht wird, wird die VM möglicherweise beendet. Weitere Informationen finden Sie unter AWT-Threading-Probleme.

System.exit()

public static void exit(int status) 

Beendet die aktuell laufenden Java Virtual Machine. Das Argument dient als Statuscode; Per Konvention gibt ein Nicht-Null-Statuscode eine abnormale Beendigung an. Diese Methode ruft die Exit-Methode in der Klasse Runtime auf. Diese Methode wird nie normal zurückgegeben.

Der Aufruf System.exit(n) ist effektiv entspricht dem Aufruf:

Runtime.getRuntime().exit(n) 
5

Zusätzlich zu den oben Sie die System.exit() können einen Exit-Code zurück, die usuefull speziell sehr sein kann, wenn Ihr den Prozess ruft automatisch die Verwendung von System.exit(code); Dies kann Ihnen helfen, zum Beispiel zu ermitteln, wenn während des Laufs ein Fehler aufgetreten ist.

3
  • Wenn Sie mehrere Fenster geöffnet haben und wollen nur das eine schließen, die geschlossenen Einsatz war JFrame.dispose().

  • Wenn Sie alle Fenster schließen möchten und beenden die Anwendung System.exit()

Verwandte Themen