JavaFX Altes Fenster (FXML Datei) löschen

mu7ti

Mitglied
Hallo Freunde,

ich habe mit dem Scene Builder eine grafische Benutzeroberfläche programmiert, bei der ich per Button-Click ein neues Fenster(FXML Datei) in die Scene setze. Nun habe ich bemerkt, dass das alte Fenster im Hintergrund noch aktiv ist. Meine Frage ist, wie kann ich das alte Fenster nach dem wechsel löschen?
 
Was meinst du mit "altes Fenster im Hintergrund noch aktiv"?


Tausch doch einfach innerhalb der Stage die Scene aus? Ansonsten sollte Scene#setRoot eigentlich Root ersetzen.
 
Ich habe es so gemacht, dass die Root bei einem Fensterwechsel ausgetauscht wird. Die zweite Seite hat einen ChangeListener. Wenn ich jetzt zwischen den beiden Seiten hin und her switche, haben ich nachher mehrere Listener die aktiv sind.
 
Auf der ersten Seite lade ich Daten aus einer Datenbank. Diese übergebe ich in einer ObservableList der zweiten Seite. Auf der zweiten Seite habe ich dann den ChangeListener auf diese ObservableList gesetzt. Zusätzlich habe ich eine Konsolenausgebe in den ChangeListener gepackt, um zu testen, ob der ChangeListener überhaupt anspringt. Dann bemerkte ich aber, dass bei mehrmaligem Seitenwechsel mehrer ChangeListener aktiv sind.
 
Soweit ich es verstanden habe, erzeugt der FXMLLoader jedes Mal ein neues Objekt von dem Controller der jeweiligen fxml Datei. Und wenn man nach dem Wechsel das vorherige Objekt schließen oder löschen könnte, dann wäre auch der Listener weg. Liege ich falsch ?
 
Soweit ich es verstanden habe, erzeugt der FXMLLoader jedes Mal ein neues Objekt von dem Controller der jeweiligen fxml Datei.
Ja.
Und wenn man nach dem Wechsel das vorherige Objekt schließen oder löschen könnte, dann wäre auch der Listener weg. Liege ich falsch ?
Ja, nur musst du das "schließen" selbst implementieren.
Die Liste hat eine Referenz auf den ChangeListener, die musst du selbstständig entfernen.
 
Hey mrBrown, das mit der remove-Methode hat funktioniert, vielen Dank erstmal dafür. Gibt es denn auch eine Möglichkeit, wie ich Anfangs bereits erwähnte, das FXML-Objekt welches vom FXMLLoader erzeugt wurde zu löschen ?
 
Java-Objekte kannst du dann als "gelöscht" betrachten, wenn es keine Referenz mehr auf diese gibt.
(und Andersrum: sie sind nicht "gelöscht", wenn es noch eine Referenz gibt.)
 
Ok, dann meine nächste Frage. Wie bekomme ich Zugriff auf diese Referenz um sie daraufhin gleich null zu setzen ? Ist das überhaupt möglich oder notwendig ? Oder soll ich diese weiterhin existieren lassen, bis diese von selbst von der Heap gelöscht werden ?
 
Ok, dann meine nächste Frage. Wie bekomme ich Zugriff auf diese Referenz um sie daraufhin gleich null zu setzen ? Ist das überhaupt möglich oder notwendig ? Oder soll ich diese weiterhin existieren lassen, bis diese von selbst von der Heap gelöscht werden ?
Naja, entweder du hast eine Referenz, oder eben nicht.
Wenn du alle Listener abräumst und es auch nicht mehr in einer Scene liegt, dürfte es keine Referenz mehr geben.
Von Heap gelöscht wird es dann irgendwann.

Wenn man irgendwo was auf null setzen muss, hat man so gut wie immer was falsch gemacht.
 

Zurück
Oben