[Java] "Löschen" von Objekten?
Servus.
Ich möchte eine Klasse erstellen, welche wenn man ein Objekt dieser aufruft, ein Anmeldefenster in einem JFrame anzeigt.
Anmeldefenster habe ich schon fertig, habe es vorher über JPanel + CardLayout geregelt, mir wurde jedoch empfohlen, es in eine andere Datei/Klasse zu kapseln. Daher möchte ich das so versuchen. Nach der Anmeldung soll jedoch alles verschwinden und "gelöscht" werden.
Ich bin nicht allzu vertraut mit den Funktionen, die Java dafür zur Verfügung stellt.
Habe nie mit dem Garbage Collector oder Ähnlichem gearbeitet.
Ist es überhaupt möglich mit "simplen Befehlen" haufenweise Objekte 'verschwinden' zu lassen?
Wenn ja, wie wird das realisiert? Ich brauch natürlich keinen ganzen Code, eine kurze Beschreibung oder evtl. ein Link wären super!
LG <3
3 Antworten
Da du das CardLayout verwendest, brauchst du doch nur die Ansicht (Card) wechseln, die gerade angezeigt wird?
Die Funktionen für den Login kommen in eine eigene Klasse. Die instanzierst du dann im Controller/in den Controllern, der/die die Events auf dem Layout handhabt/handhaben (Klick auf Button, u.ä.). Löschen musst du aber nichts.
Alles klar. Danke dir. Noch eine Nebenfrage: Ich möchte für eine Funktion (Filterangaben) eine neue Klasse bauen (noch in der Main, füllt aber alles, weil die Funktion ca. 80 Objekte enthält). Die Filterangaben basieren auf versch. Listenelementen die wählbar sind. D.h. anderes Listenelement, andere Filter. Ich würde gerne die Klasse Filter erstellen und dann Subklassen für das jeweilige Listenelement. Pack ich dann jede Subklasse in eine eigene Datei? Wären dann 8 Dateien extra :O LG
Jede Klasse sollte in eine eigene Datei. Das gilt ebenso für Enumerationen und Interfaces. Soweit die empfohlene Konvention - wie du dein Projekt letztendlich wirklich verwaltest, ist natürlich deine Entscheidung.
Danke dir! Ich möchte schon gern Standards einhalten. Vielen Vielen Dank <3
Hallo.
Der Garbage Collector arbeitet autonom und kann nicht direkt beeinflusst werden. Alles was du tun kannst ist, ihm Hinweise zu geben und so zu programmieren, dass Speicher schnell frei werden kann.
- Pack Variablen immer in den kleinst nötigen Scope
- Lösche Referenzen auf nicht mehr benötigte Objekte (Variable auf null setzen)
Es nutzt auch nichts, die finalize() Methode manuell aufzurufen. Dadurch wird zwar der Code in der Methode ausgeführt, das Objekt aber nicht gelöscht.
Hi,
du denkst viel zu kompliziert... die automatische Speicherverwaltung ist gerade ein Vorteil von Java, und man muss dazu nichts tun.
Wenn es keine Referenzen mehr auf ein Objekt gibt (sei es, du setzt die Variable auf null oder diese verschwindet aus dem Gültigkeitsbereich) wird das Objekt irgendwann mal von Java automatisch freigegeben.
Das passiert nicht sofort (man kann das System.gc() und Co beeinflussen), da manuell irgendwas zu tun ist aber unnötig, Java kann das ganz gut selbst.
Wenn deine Anmeldung fertig ist, versteckst du das Fenster einfach (setVisible(false)) und setzt die Variable, die das Objekt beinhaltet auf null, freigeben tut Java dann das Fenster mit allen Unterobjekten von allein.
D.h. Ablauf wie folgt: Anmeldemaske anzeigen, anmelden, Fenster unsichtbar/deaktiviert machen, referenz löschen. So korrekt?
Das stimmt so. Mir wurde nur empfohlen, dass ich diese ganze Prozedur in ne eigene Klasse kapseln soll. Deswegen dachte ich, dass das löschen da vllt. etwas bringt. Ist das ein unnötiger Schritt?