Listeners und das Ende einer Componente

Status
Nicht offen für weitere Antworten.
Hallo,

mir ist heute ein Gedanke gekommen der mich bisher ratlos lässt.
Wenn ich eine Componente schreibe (bzw. eine vorhandene erweitere) oder einfach nur eine bestehende verwende und habe keinen Nutzen mehr dafür, wie werde ich die los?

Kann refrerenzAufMeineComponente = null; funktionieren? Was ist mit den ganzen Referenzen die in anderen Objekten existieren weil meine Componente mal deren add*Listener(this) aufgerufen hat?
Klar gibt es remove*Listener, aber abgesehen davon dass ich keine Liste von Objekten bei denen ich registriert bin habe, ist die Frage wann die Componente sich dort ausklinken soll. Destruktoren kenn Java nicht, also auf finalize verlassen?

Robert
 

Schandro

Top Contributor
Aus meiner Erfahrung von einem anderen Projekt heraus glaube ich nicht, das geaddete Listener ein finalize verhindern. Ein Component speichert nämlich alle geadetten Listener in sich selber (wenn ich den Sourcecode von Component grade richtig interpretiert habe).

Wenn es also keine Referenzen und auch keine panels gibt, die selber noch referenziert sind und auf denen der Component geaddet ist, sollte der GarbageCollector ihn löschen
 

Marco13

Top Contributor
Was ist mit den ganzen Referenzen die in anderen Objekten existieren weil meine Componente mal deren add*Listener(this) aufgerufen hat?
Die bleiben erstmal bestehen, und das Objekt wird nicht gelöscht. Das kann ein nicht unerhebliches Problem sein. Zumindest versuche ich, mich an die "Daumenregel" zu halten: Wenn ein Objekt nicht selbst der (einzige) Besitzer eines anderen Objektes ist, sollte es sich NIE selbst als Listener zu diesem Objekt hinzufügen. Man bekommt es dann ja nicht mehr weg. Workaround-Methoden wie "detachYourselfFromAllObjectsToWhichYouHaveAttachedYourselfAsListener", die man dann von außen aufrufen ... müßte (was man dann natürlich vergißt, weil sowas auch schwer Dokumentierbar ist) sind da IMHO unschön.

EDIT: @Schandro: Wenn ich das richtig verstanden habe, ging es genau um die umgekehrte Richtung. Wenn ein Objekt Listener hat, dann kann das Objekt natürlich gelöscht werden (die Listener haben ja umgekehrt keine Referenz auf das Objekt).
 
Die bleiben erstmal bestehen, und das Objekt wird nicht gelöscht. Das kann ein nicht unerhebliches Problem sein. Zumindest versuche ich, mich an die "Daumenregel" zu halten: Wenn ein Objekt nicht selbst der (einzige) Besitzer eines anderen Objektes ist, sollte es sich NIE selbst als Listener zu diesem Objekt hinzufügen. Man bekommt es dann ja nicht mehr weg. Workaround-Methoden wie "detachYourselfFromAllObjectsToWhichYouHaveAttachedYourselfAsListener", die man dann von außen aufrufen ... müßte (was man dann natürlich vergißt, weil sowas auch schwer Dokumentierbar ist) sind da IMHO unschön.
Meine Befürchtung ist also korrekt. Das bedeutet also Disziplin und Aufpassen beim Programmieren (was natürlich nie verkehrt ist). Aber wahrscheinlich auch dass es durchaus umständlich werden kann weil die einfache Lösung problematisch ist.

Ich finde es ja interessant dass so viel zum Anlegen und Erstellen von Componenten zu lesen ist, aber zum Demontieren habe ich bisher nichts gesehen.

Tools um solche Probleme zu vermeiden gibt es wohl keine. Hast Du eine Ahnung was ich tun könnte um Objekten die im Speicher liegen bleiben auf die Schliche zu kommen?

Robert
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R AWT Listeners entfernen AWT, Swing, JavaFX & SWT 0
T Anzahl Event Listeners AWT, Swing, JavaFX & SWT 4
D Ergebnis des Listeners ermitteln AWT, Swing, JavaFX & SWT 8
G Event eines Listeners unterbrechen AWT, Swing, JavaFX & SWT 2
N jFrame löscht am Ende des Threads alles AWT, Swing, JavaFX & SWT 2
H String teilen, damit bei JLabel keine Punkte am Ende angezeigt werden AWT, Swing, JavaFX & SWT 4
S Kann man erzwingen, dass Java 'zu Ende zeichnet'..? AWT, Swing, JavaFX & SWT 7
S JavaFX TreeItem: Icon am Ende eines Eintrags anhängen AWT, Swing, JavaFX & SWT 2
B Programmende bei Ende der XSession AWT, Swing, JavaFX & SWT 0
I Pfeil zeichnen am Ende einer Linie AWT, Swing, JavaFX & SWT 1
G JScrollPane bricht am Ende der Anzeige nicht um AWT, Swing, JavaFX & SWT 2
W Swing Zum Ende einer Scrollpane scrollen AWT, Swing, JavaFX & SWT 2
V Ende eines Frames abwarten AWT, Swing, JavaFX & SWT 7
C JTextArea scrollt bei append(String) aus Threads nicht ans Ende AWT, Swing, JavaFX & SWT 7
M Anzeige updatet sich erst am Ende des Programms AWT, Swing, JavaFX & SWT 3
A Ende eines Dialoges abwarten AWT, Swing, JavaFX & SWT 16
D Swing JProgressBar soll ende erkennen AWT, Swing, JavaFX & SWT 4
P Swing JTable null values an das Ende verschieben AWT, Swing, JavaFX & SWT 2
S (Applets) JProgressBar wird erst am Ende angezeigt AWT, Swing, JavaFX & SWT 13
C Swing Labeltext am Anfang statt am Ende kürzen AWT, Swing, JavaFX & SWT 6
T DND mit JList Elemente nicht am Ende einfügen AWT, Swing, JavaFX & SWT 3
A Swing JScrollPane ans ende Scrollen AWT, Swing, JavaFX & SWT 9
H JList in JScrollPane -> ScrollBar ans Ende setzen AWT, Swing, JavaFX & SWT 5
S SWT Spinner - Coursor ans Ende AWT, Swing, JavaFX & SWT 19
M JTextPane Ende des Feldes AWT, Swing, JavaFX & SWT 4
N SWT Ende vom String in Text anzeigen AWT, Swing, JavaFX & SWT 5
T Auf Ende von mehreren Threads warten, ohne den EDT zu blockieren AWT, Swing, JavaFX & SWT 1
G Shift + Ende auf JTable AWT, Swing, JavaFX & SWT 2
G Icon ans Ende einer JToolbar AWT, Swing, JavaFX & SWT 7
G Am Ende einer Tabellenzeile zu definierter Komponente gehen AWT, Swing, JavaFX & SWT 2
M JTable zum Anfang oder Ende springen AWT, Swing, JavaFX & SWT 9
G Das ende von einem JTextPane abschneiden AWT, Swing, JavaFX & SWT 2
thE_29 JScrollPane Ende rausfinden AWT, Swing, JavaFX & SWT 3
W JFileChooser speicher von Datein mit und ohne ende AWT, Swing, JavaFX & SWT 2
T "..." am Ende der Zelle in JTable AWT, Swing, JavaFX & SWT 2
MiMa Optimieren einer Methode zum Zentrieren von Fenstern AWT, Swing, JavaFX & SWT 0
T VerifyListener - Ersetzen einer 0 AWT, Swing, JavaFX & SWT 5
I JavaFX JavaFx-Anwendung für die Erstellung einer Windows-Anwendung? AWT, Swing, JavaFX & SWT 6
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
N Dropshadow setzen bei einer Gruppe von Tiles, die sich jeweils in einer Stackpane befinden, welche in einer Gridpane angeordnet sind. AWT, Swing, JavaFX & SWT 0
M Daten zufällig Einlesen aus einer Datei (binäres Format) AWT, Swing, JavaFX & SWT 7
ExceptionOfExpectation Mit einer laufenden GUI Applikation eine Datei in dem Rechner löschen AWT, Swing, JavaFX & SWT 2
Jose05 Aus einer normalen Java Klasse eine FXML-Klasse laden AWT, Swing, JavaFX & SWT 12
Linjutsu Den Inhalten aus einer ArrayList Bilder zuweisen (Kartenspiel) AWT, Swing, JavaFX & SWT 8
H JavaFX Timeline II: Verschieben einer ImageView AWT, Swing, JavaFX & SWT 16
I Hilfe bei dem Erstellen einer SQL Abfrage aus gewählten JComboBoxen AWT, Swing, JavaFX & SWT 5
L Swing TextPanel Schrift untereinander und auf einer Höhe AWT, Swing, JavaFX & SWT 3
mananana Mögliche probleme die in einer GUI passieren Können AWT, Swing, JavaFX & SWT 6
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
Ernesto95 JavaFX Return Value nach Beendigung einer Animation AWT, Swing, JavaFX & SWT 15
melaniemueller Wortliste in einer Datei ablegen AWT, Swing, JavaFX & SWT 12
D Layout einer scene mit ListView Elementen und Zwei Textfeldern AWT, Swing, JavaFX & SWT 1
Jose05 JavaFx Fxml: GUI aus einer anderen Klasse starten AWT, Swing, JavaFX & SWT 1
U Was genau ist das Objekt einer affinentransformation? AWT, Swing, JavaFX & SWT 1
B JavaFX Prüfen ob ein Objekt sich mehrmals in einer Liste befindet AWT, Swing, JavaFX & SWT 5
mac2010 JavaFX Einbindung einer Karte AWT, Swing, JavaFX & SWT 1
donnico2 Objekte in der GUI ausgeben mit Hilfe einer DAO AWT, Swing, JavaFX & SWT 1
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
W Aufrufen einer bestimmten Scene mit if-Bedingung AWT, Swing, JavaFX & SWT 4
J Ablaufsteuerung/Anleitung machen mit JDialog und einer Zustandsmaschine AWT, Swing, JavaFX & SWT 1
missy72 JavaFX Wiederholen einer IF-Abfrage beim erneuten Öffnen einer Stage AWT, Swing, JavaFX & SWT 11
missy72 JavaFX TableView / TableColumn / ObservableList / zwei Werte in einer Zelle AWT, Swing, JavaFX & SWT 2
S JavaFX - mit Listener Veränderungen in einer TableView abhören AWT, Swing, JavaFX & SWT 3
missy72 JavaFX ObservableList in einer ArrayList speichern. AWT, Swing, JavaFX & SWT 7
HoT Sortieren von ein paar Zeilen in einer Tabelle, aber nicht die ganze Tabelle AWT, Swing, JavaFX & SWT 3
kodela Swing Element einer JComboBox ausgrauen AWT, Swing, JavaFX & SWT 3
B JavaFX Farbe eines Quadrates in einer separaten Klasse ändern AWT, Swing, JavaFX & SWT 4
H Daten aus einer XML(x83-Datei) in einem JFrame anzeigen lassen AWT, Swing, JavaFX & SWT 9
N Aufruf einer anderen Klasse durch Button ActionListener AWT, Swing, JavaFX & SWT 2
N Einer TextArea ein ScrollPane hinzufügen AWT, Swing, JavaFX & SWT 8
L JavaFX Exception nach includieren einer fxml // nested controller AWT, Swing, JavaFX & SWT 1
K Probleme bei der Erstellung und Ausführung einer Jar Datei AWT, Swing, JavaFX & SWT 2
A checkbox in einer TableView abhängig von einem anderen Celleninhalt disablen AWT, Swing, JavaFX & SWT 1
G Verknüpfung einer pdf Datei AWT, Swing, JavaFX & SWT 2
B Ausgaben einer Umrechnung vom Textfeld in ein Label AWT, Swing, JavaFX & SWT 2
F jTree und das Model aus einer eigenen Klasse AWT, Swing, JavaFX & SWT 1
D Zeilenumbruch in einer JTable AWT, Swing, JavaFX & SWT 9
N Wie kann ich zwei Grafiken in einer Oberfläche anzeigen lassen? AWT, Swing, JavaFX & SWT 8
@SupressWarnings() JavaFX Auf den Controller einer ListCell zugreifen AWT, Swing, JavaFX & SWT 4
Drachenbauer Swing Wie ändere ich den Hintergrund vom Anzeigefeld einer JComboBox, die nicht zum Hineinschreiben offen steht? AWT, Swing, JavaFX & SWT 32
H 3 verschiedene Nachrichten in einer FXML View die Infos kommen aus DB AWT, Swing, JavaFX & SWT 4
karlmasutra JavaFX Zugriff auf eine erzeugte Scene aus einer anderen Klasse AWT, Swing, JavaFX & SWT 1
S Java GUI durch variable Größe einer Map anpassen AWT, Swing, JavaFX & SWT 3
B Textfelder in einer ListView ausgeben AWT, Swing, JavaFX & SWT 13
J Searchfunktion auf einer MS Access Datenbank AWT, Swing, JavaFX & SWT 7
B Text im Tetfeld in einer TableView darstellen AWT, Swing, JavaFX & SWT 20
M Inhalte einer FlowPane AWT, Swing, JavaFX & SWT 4
W Swing JTable Zeilenumbruch innerhalb einer Zelle AWT, Swing, JavaFX & SWT 3
E Prinzip: wie man Ereignisse in einer GUI verarbeit. Frage zum Design? AWT, Swing, JavaFX & SWT 10
FRI3ND JavaFX: Wie kann ich einer Scene Argumente übergeben? AWT, Swing, JavaFX & SWT 14
K Swing Text eines Lables in einer Methode ändern AWT, Swing, JavaFX & SWT 13
G JavaFX JavaFX-Dialog aus einer Nicht-JavaFX-Anwendung heraus AWT, Swing, JavaFX & SWT 1
1 Swing Progressbar benutzen um Fortschritt einer Methode anzuzeigen AWT, Swing, JavaFX & SWT 4
K JavaFX ViewTable mit einer LinkedList befüllen AWT, Swing, JavaFX & SWT 3
L CardLayout in einer Klasse? AWT, Swing, JavaFX & SWT 2
J Compiler in der JavaFX stop() Methode warten lassen bist eine Aktion in einer anderen Scene gemacht AWT, Swing, JavaFX & SWT 5
D Java FX Image in einer Webanwendung annotieren und den Bereich ausschneiden AWT, Swing, JavaFX & SWT 0
L Java- UI zweites Fenster aus einer anderen Klasse öffnen durch ButtonClick AWT, Swing, JavaFX & SWT 4
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5
ralfb1105 Swing Ausführung einer SwingWorker Klasse stoppen AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben