# JFrame mit WindowListener schließen



## DStrohma (1. Nov 2009)

Hallo liebe Community 

ich kenne setDefaultCloseOperation(EXIT_ON_CLOSE) aber wie schließe ich einen JFrame in einem WindowListener? Sieht bei mir so aus:


```
this.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				// Schließen?!?
			}
		});
```

Mir reicht in dem Fall ein dispose() leider nicht aus, ich will den JFrame wirklich terminieren ohne das restliche Programm gleich mit zu beenden. Also ein System.exit(0) geht auch nicht...

Danke für die Antworten,
DS


----------



## Illuvatar (1. Nov 2009)

Und warum reicht ein dispose nicht aus? Es schließt den Frame und gibt sämtliche Resourcen frei (und beendet den event dispatch thread, falls keine anderen Windows offen sind).


----------



## André Uhres (1. Nov 2009)

Illuvatar hat gesagt.:


> Und warum reicht ein dispose nicht aus? Es ... gibt sämtliche Resourcen frei ...


Stimmt nur begrenzt. Nach dispose() kann man das Fenster mit setVisible(true) wieder sichtbar machen: gewisse Java Resourcen bleiben also bestehen! (siehe auch javadoc zu dispose)


----------



## jdk6man (1. Nov 2009)

aber für den Programmierer sollte das Thema soweit erledigt sein und er braucht sich um das Fenster soweit nicht mehr zu kümmern.


----------



## DStrohma (1. Nov 2009)

André Uhres hat gesagt.:


> Stimmt nur begrenzt. Nach dispose() kann man das Fenster mit setVisible(true) wieder sichtbar machen: gewisse Java Resourcen bleiben also bestehen! (siehe auch javadoc zu dispose)



Genau so ist es, deshalb reicht mir das nicht aus. Ich hab da zwar was gefunden:


```
// 'obj' ist eine Referenz auf den JFrame

processWindowEvent(new WindowEvent(obj, WindowEvent.WINDOW_CLOSING));
```

Scheint aber nur mit AWT zu gehen? Jedenfalls kann ich das in dem WindowListener nicht verwenden. Irgendwelche Ideen?


----------



## jdk6man (1. Nov 2009)

dafür ist doch der WindowListener da. Das Event WINDOW_CLOSING wird von der Methode windowClosing empfangen


----------



## DStrohma (1. Nov 2009)

jdk6man hat gesagt.:


> dafür ist doch der WindowListener da. Das Event WINDOW_CLOSING wird von der Methode windowClosing empfangen



UPS... Alles klar 



jdk6man hat gesagt.:


> aber für den Programmierer sollte das Thema soweit erledigt sein und er braucht sich um das Fenster soweit nicht mehr zu kümmern.



Ich hab bei meiner Anwendung realisiert das irgendwelche Parameter / Variablen noch vorhanden sind wenn ich dispose() aufrufe und danach den JFrame wieder darstell. Genauer kann ich das gar nicht mehr spezifizieren - Ich hab den Punkt einfach auf meiner TODO Liste  (Is schon ne Weile her)

Es ist ja nicht so als wär das dispose() Problem nicht lösbar aber ich wüsste trotzdem gern - weils meiner Meinung nach sauberer wär - wie ich ein Fenster wirklich beenden kann ohne alles andere mit zu beenden...


----------



## jdk6man (1. Nov 2009)

ich denke sauberer als mit dispose kriegst dus nicht hin es sei denn du schiesst die jvm ab und startest sie neu  . Ne aber die Resourcen die da noch irgendwie im Speicher rumgeistern die sind ja Problem der jvm und da kannst du glaub ich keinen Einfluss drauf nehmen.


----------



## André Uhres (1. Nov 2009)

jdk6man hat gesagt.:


> die Resourcen die da noch irgendwie im Speicher rumgeistern


Diese Resourcen geistern auch nicht, sondern die API sagt bei _dispose _sinngemäss, daß sie absichtlich erhalten bleiben, damit man das Fenster später wieder sichtbar machen kann.


----------



## DStrohma (1. Nov 2009)

Es gibt in Java also keine Möglichkeit einen JFrame so zu beenden dass nichts mehr von ihm irgendwo rumschwirrt?? :autsch:

wow...


----------



## jdk6man (1. Nov 2009)

ja das meinte ich auch ^^


----------



## Illuvatar (1. Nov 2009)

Hm versteh ich da irgendwas falsch?
Window (Java Platform SE 6)



> Releases all of the native screen resources used by this Window, its subcomponents, and all of its owned children. That is, the resources for these Components will be destroyed, any memory they consume will be returned to the OS, and they will be marked as undisplayable.
> 
> The Window and its subcomponents can be made displayable again by rebuilding the native resources with a subsequent call to pack or show. The states of the recreated Window and its subcomponents will be identical to the states of these objects at the point where the Window was disposed (not accounting for additional modifications between those actions).



The resources will be destroyed. Any memory will be returned to the OS. The components can be made displayable again by *rebuilding* the resources.


----------



## André Uhres (1. Nov 2009)

Da sind ja nicht die Java Resourcen gemeint! (nur Betriebssystem Resourcen)


----------

