Objekte löschen



  • Ich habe ein Fenster(ein Objekt, dessen Klasse von JFrame geerbt hat), in dem ich zahlreiche Veränderungen vornehme. Um auf Wunsch wieder zur Ausgangsstellung zurück zu kommen und nicht alle Änderungen "per Hand" wieder rückgängig machen zu müssen, möchte ich dieses Objekt sozusagen löschen und gleich danach neu erstellen. Und beim Löschen liegt das Problem. Das neue Objekt wird wie gewünscht erstellt, nur habe ich eben dahinter noch das alte Fenster.In diesen Objekten läuft übrigens nebenbei je ein Thread, falls das von Bedeutung ist.
    Mit finalize() bin ich hier nicht weitergekommen, aber ich denk mal das ist hier eh total fehl am Platz? Denn die Methode benutzt ja auch der Garbage Collecor, und der krallt sich das "alte Fenster" ja ganz offensichtlich nicht obwohl es nicht mehr benutzt wird(auch wenn ich den Thread anhalte)😕
    Ich hoffe mir kann hier irgendwer weiterhelfen 🤡



  • Hallo,

    Plan A: Du schreibst eine Methode, die vom Konstruktor aufgerufen wird. Diese Methode konfigueriert die Komponenten und wirklich *nur* das, erstellt werden die Komponenten im Konstruktor selber. Willst du jetzt wieder den Originalzustand, rufst du einfach besagte Methode auf:

    public class Foo extends JFrame {
      public Foo() {
        //erstellen der Komponenten
        configure();
      }
    
      protected void configure() {
        //So, hier setzt du z.B. RadioButton x auf true usw.
      }
    
      //Setzt alles wieder auf start
      public void reset() {
        configure();
      }
    };
    

    Plan B:
    Du sagst einfach, dein "altes" Fenster soll verschwinden und erstellst n neues:

    Foo f = new Foo();
    //mach was mit f
    
    f.setVisible(false);  //wegdrücken
    f = new Foo();  //so, jetzt haben wir wieder n neues  :)
    

    MfG

    GPC



  • Danke erstmal für die Antwort. Der "Trick" mit dem setVisible(false) ist aber nicht wirklich geeignet, wenn diese Aktion eventuell mehrmals durchgeführt wird, weil sie dann unter Umständen relativ speicherintensiv wird oder? Ich hab mich deswegen doch lieber für die "Zu Fuß"-Methode entschieden, also Plan A... 🕶



  • BeNNeR schrieb:

    Danke erstmal für die Antwort. Der "Trick" mit dem setVisible(false) ist aber nicht wirklich geeignet, wenn diese Aktion eventuell mehrmals durchgeführt wird, weil sie dann unter Umständen relativ speicherintensiv wird oder?

    Nö, hält sich in Grenzen, der GC räumt ja regelmäßig auf und erkennt, dass das Fenster nicht mehr referenziert wird und killt es einfach.

    MfG

    GPC


Anmelden zum Antworten