# Wann System.exit und wann dispose?



## Rudolf (1. Feb 2011)

Hi,

im Handbuch der JavaProgrammierung steht in einem ActionListener diese Methoden drin, um ein Fenster zu schließen


```
setVisible(false);
dispose();
System.exit(0);
```

Jetzt frage ich mich, ob das so Sinn macht und wenn ja warum und welchen.


```
System.exit.(0)
```
 schließt ja die ganze Anwendung. Warum sollte man vorher noch den anderen kramm aufrufen?


----------



## HoaX (1. Feb 2011)

Aus keinem. System.exit(0) reicht auch.

Allerdings würde ich soweit es geht auch auf System.exit verzichten. Man kann beim Hauptfenster ja EXIT_ON_CLOSE setzen, dann beendet sich die Anwendung beim Schließen des Fensters - egal ob mittels dispose() oder setVisible(false) oder X-Button oder ...


----------



## Rudolf (1. Feb 2011)

Wo kann man EXIT_ON_CLOSE setzen?
Habs bisher nicht gefunden.

edit: mir ist aufgefallen, dass es sich hier um einen dialog handelt und nicht um ein frame.

Außerdem habe ich im Dialog einen "Cancel" Button, der das System beenden soll, wenn er geklickt wird. Daher wieß ich nicht, was ich sonst außer System.exit(0) nehmen soll.


----------



## Haave (1. Feb 2011)

Rudolf hat gesagt.:


> Wo kann man EXIT_ON_CLOSE setzen?
> Habs bisher nicht gefunden.


Gehört zu JFrame, Aufruf mit 
	
	
	
	





```
deinJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
```
.


----------



## Rudolf (1. Feb 2011)

Haave hat gesagt.:


> Gehört zu JFrame, Aufruf mit
> 
> 
> 
> ...





> edit: mir ist aufgefallen, dass es sich hier um einen dialog handelt und nicht um ein frame.



es ist noch immer jdialog


----------



## Gast2 (1. Feb 2011)

Rudolf hat gesagt.:


> es ist noch immer jdialog...


... der auch die Methode setDefaultCloseOperation anbietet.
JDialog (Java Platform SE 6)


----------



## Rudolf (1. Feb 2011)

aber nicht für EXIT_ON_CLOSE

Leute^^ :lol:


----------



## The_S (1. Feb 2011)

Warum überhaupt System.exit oder EXIT_ON_CLOSE? Dispose ist doch viel sinniger (es sei denn man hat mehrere Fenster offen und möchte alle beim schließen des Hauptfensters beenden). Dispose schließt das Fenster, wenn das letzte Fenster geschlossen ist, läuft der Swing-Thread aus, wenn der Swing-Thread ausgelaufen ist und sonst kein anderer Thread mehr läuft, beendet sich das Programm. Und gut ist. System.exit ist immer so rigoros ...


----------



## Rudolf (1. Feb 2011)

> (es sei denn man hat mehrere Fenster offen und möchte alle beim schließen des Hauptfensters beenden)



genau das ist es ja^^


----------



## Suinos (1. Feb 2011)

Mit Window.getWindows() werden alle Fenster der Applikation zurückgegeben.

Diese kannst du dann schliessen:

```
final Window[] windows = Window.getWindows();
		
for (final Window window : windows)
{
	window.dispose();
}
```

Falls der Prozess danach aber noch weiterhin läuft, hast du noch non-deamon Threads, welche laufen.


----------

