# setDefaultCloseOperation( ? )



## kulturfenster (6. Apr 2009)

Liebes Forum,
ich muss eine kleine ÜBung machen, bei der man eine Reihe von Uhren at Runtime öffnen und schliessen können soll (ObserverPattern). Nun hab ich mein Programm soweit, dass es eine beliebige Anzahl an Analogen Uhren (new AnalogClock() ) kreieren kann. Mein Problem ist, dass sich das Programm beendet, sobald ich eine dieser Uhren schliesse. 

In der gegebenen AnalogClock-Klasse gibts eine innere Klasse, welche wohl dazu zuständig wäre. 

```
/**
     * A window listener that detaches the clock from the timer when the window 
     * is being closed.
     */
    private class DetachOnClosingWindowListener extends WindowAdapter {
        public void windowClosing(WindowEvent e) {
            //setDefaultCloseOperation(e.DO_NOTHING_ON_CLOSE);
            
            // Do some cleanup here...
        }
    }
```
In der API bin ich auf "DO_NOTHING_ON_CLOSE" gestossen. Allerdings hab ich nicht recht herausgefunden, wie ich dies implementieren soll. 

AnalogClock() erbt übrigens von JFrame. 

hat mir jemand einen Tipp?


----------



## diggaa1984 (6. Apr 2009)

diese eigenschaft kannst du schon im konstruktor von AnalogClock setzen. Wenn die Uhren einfach aufrufbar bleiben sollen, wäre ein HIDE_ON_CLOSE vielleicht ganz günstig.


----------



## kulturfenster (6. Apr 2009)

```
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
```
Diese Methoden haben alle den gleichen Effekt auf mein Ührchen: sie lassen das gesamte Programm beenden.

Ziel ist übrigens schon, dass man die Uhren bei Bedarf beendet. Sie sollen also nicht blos minimiert werden.

Falls ich nicht genug Infos bereitgestellt habe, einfach melden!


----------



## Ebenius (6. Apr 2009)

kulturfenster hat gesagt.:


> ```
> setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
> setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
> setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
> ```


Anmerkung: Diese Konstanten sind im Interface _WindowConstants_ deklariert; nicht in JFrame direkt.

Ebenius


----------



## Verjigorm (6. Apr 2009)

Dann machst du was falsch,
DO_NOTHING_ON_CLOSE macht nämlich genau das, was es bedeutet, nämlich erstmal nix 

Hast du einen Windowlistener implementiert, der zufällig System.exit() oder sowas aufruft?

Ansonsten mehr Code hilft immer


----------



## kulturfenster (6. Apr 2009)

Ebenius hat gesagt.:


> Anmerkung: Diese Konstanten sind im Interface _WindowConstants_ deklariert; nicht in JFrame direkt.
> 
> Ebenius


Was bedeutet das für mich genau? Wenn du von Konstanten sprichst, meinst du EXIT_ON_CLOSE, etc, oder?



Verjigorm hat gesagt.:


> Dann machst du was falsch,


Stimmt, ich hatte die Methode bei der falschen Uhr getestet, weshalb natürlich immer derselbe Effekt auftrat. 

Abgesehen davon, dass ich Ebenius' Tipp noch nicht verstehe, funktioniert nun aber alles! Vielen Dank für die Hilfe!


----------



## Ebenius (6. Apr 2009)

kulturfenster hat gesagt.:


> Was bedeutet das für mich genau? Wenn du von Konstanten sprichst, meinst du EXIT_ON_CLOSE, etc, oder?


Die meine ich, ja. Man kann zwar "JFrame.EXIT_ON_CLOSE" hinschreiben (weil JFrame WindowConstants implementiert), man sollte aber besser "WindowConstants.EXIT_ON_CLOSE" schreiben, weil dann klar ist, wo die Konstante wirklich herkommt. Auch wenn es darüber unterschiedliche Ansichten gibt. 

Ebenius


----------



## kulturfenster (6. Apr 2009)

ach so, verstehe. Klingt einleuchtend muss ich sagen. In meinem JavaBuch ist es mit JFrame. Mal schauen, ob ich mir das merken kann... 

so, Thema beendet. 

Vielen Dank nochmals allen Beteiligten! :toll:


----------

