# Klasse beenden



## Sonstwer (26. Feb 2009)

Hallo,

wie kann man eine Klasse komplett recursiv, d.h. mit allen Unterklassen die noch offen sind schliesen?

```
this.dispose();
new blubberclass();
```

Dies funktioniert leider nicht da noch Teile der Klasse nach this.dispose() laufen


----------



## SlaterB (26. Feb 2009)

definiere 'laufen'


----------



## Sonstwer (26. Feb 2009)

Unterklassen rufen in der Klasse noch Methoden auf, bei bestimmten Events. Das ganze ist ein Spiel, das bei einem bestimmten Event (Zeit abgelaufen) eine Meldung anzeigt das man verloren hat.  Wenn das passiert ruft die Unterklasse eine Methode ind er Klasse auf die sich vorher beendet haben soll. Aber die Methode wird trotzdem noch aufgerufen und mir die Meldung angezeigt.


----------



## Noctarius (26. Feb 2009)

Versteh nur ich nicht was er versucht? Hab's im ersten Post schon nicht verstanden und daher noch nicht geantwortet gehabt.

Du kannst eine Klasse nicht beenden, wenn überhaupt eine Instanz der Klasse aber auch die kannst du nicht explizit beenden außer die Klasse wäre eine Dauerscheife mit (z.B.) while(!run) als Abbruchbedingung.

Was soll denn Klasse beenden bedeuten?


----------



## SlaterB (26. Feb 2009)

> Unterklassen rufen in der Klasse noch Methoden auf, bei bestimmten Events. 

sind das andere Threads oder der gleiche Thread, der aktuell über dispose() nachdenkt?
jedenfalls kann man derartiges nicht abbrechen,
höchstens als abbrechungswürdig markieren (irgendeinen boolean auf true setzen) und hoffen, dass andere das irgendwann mal merken und selbständig aufhören


----------



## Sonstwer (26. Feb 2009)

Schade, das man net einfach sagen kann this.kill();

Ich hab zwar jetzt eine Möglichkeit gefunden, das nichts mehr agezeigt wird, aber mein Programm wird unheimlich langsam wenn ich die Klasse wieder starte!

Mein Programm ist so aufgebaut das es ein Hauptmenü gibt das das Spielfenster über einen Button öffnet im Spielfenster gibt es eine Button "Zurück". Mit diesem wird wieder das Hauptmenü geöffnet. Hier sollte die Spielfenster Klasse weggeworfen werden. Wenn man im Hauptmenü wieder die Spielfensterklasse aufruft ist das Spiel sehr viel langsamer geworden, weil die alte Spielfensterklasse im Hintergrund noch läuft obwohl das Fenster bereits mit this.dispose() geschlossen wurde.


----------



## Verjigorm (26. Feb 2009)

Wenn man es richtig macht, dann geht das auch


----------



## Ebenius (26. Feb 2009)

Sonstwer hat gesagt.:


> Schade, das man net einfach sagen kann this.kill();


In diesem Fall wäre aber besser: [HIGHLIGHT="Java"]this.commitSuicide();[/HIGHLIGHT]
SCNR, Ebenius


----------



## maki (26. Feb 2009)

^^^^^
rofl!


----------



## Leroy42 (26. Feb 2009)

Sonstwer hat gesagt.:


> Mein Programm ist so aufgebaut das es ein Hauptmenü gibt das das Spielfenster über einen Button öffnet im Spielfenster gibt es eine Button "Zurück". Mit diesem wird wieder das Hauptmenü geöffnet. Hier sollte die Spielfenster Klasse weggeworfen werden



Was verstehst du darunter, eine Klasse _wegzuwerfen_


----------



## Verjigorm (26. Feb 2009)

GarbageCollector.wirfwegdenScheiss(this.classFile)


----------



## Sonstwer (26. Feb 2009)

Mit wegwerfen meine ich das die Ausführung von Code der noch im Speicher liegt nicht mehr ausgeführt werden kann. Wie als wenn ich auf das große X klicke aber nur eine Klasse beendet wird und nicht das gesamte Programm.


----------



## Verjigorm (26. Feb 2009)

Du musst schon selbst implementieren, was von deinen Code so betroffen sein soll.
Wenn du verschiedene Threads startest, dann musst du dafür sorgen, dass sie beendet werden.
Wenn du Datei- oder Datenbankverbindungen auf machst, musst du dafür sorgen, dass sie sauber geschlossen werden.

Nur weil z.B. die GUI unsichtbar bzw. beendet wurde heisst das nicht, dass sein ganzer Hintergrundkram automatisch sich in Luft auflöst.


----------

