Swing UI schließen

jacko87

Grünschnabel
hallo allerseits,
habe mal eine vermeintlich simple Frage. Die sich für mich zu einem unlösbaren Problem zu entwickeln scheint.

Der Applikation an der Ich programmiere, soll eine Logout Funktion hinzugefügt werden. Das habe ich soweit geschafft. Allerdings ist nach drei Logouts, der Speicher voll.
Nach einem Login wird, die GUI komplett neu gebaut, damit ich keine Probleme mit etwaigen Benutzerrechten bekomme. Aber die alten geschlossenen GUI bleiben aus irgendeinem Grund im Speicher. Ich halte definitiv keine Referenzen mehr. Ich habe mir mal den vollständigen Heap angesehen und es scheinen lediglich andere UI Componten oder irgendwelche Listener auf die alte GUI verweisen. Sieht für mich aus wie eine riesige Island of Isolation oder eher ein "Kontinent". Die Objekte werden aber auch bei einem Full GC nicht aus dem Speicher entfernt.

Hat jemand eine Idee, wie man Swing und evtl auch den dazugehörigen Thread komplett runterfahren kann? Oder weiß jemand, welche Referenzen manuell gelöst werden müssen?

Ein kompletter Neustart der Applikation dauert zu lange (30 Sekunden), da die Applikation auf einem Oracle Framework (BC4J) aufbaut und viele Informationen erst zur Laufzeit aus XML Dateien gelesen werden.

Für jede Idee wäre ich dankbar.

Gruß, jacko
 
Habe ich das richtig verstanden, dass beim Login die GUI aufgemacht wird und beim Logout wird sie zugemacht und der Login-Screen angezeigt?

Woraus besteht deine GUI? Aus JFrames? Wie schließt du diese beim Logout?
 
ja hast alles richtig verstanden. Der Login Screen wird aber erst gestartet, wenn alles andere zu sein sollte.

Ist ein JFrame mit x JInternalFrames. Die alle über dispose() und ggf. über setclosed(true) geschlossen werden.

Es besteht eine sehr enge Kopplung zwischen GUI Elementen und BC4J. Daran sind unter anderem die Benutzerrechte auf den jeweiligen Masken geknüpft. Meine Vermutung war, dass es deutlich einfacher wäre die Masken neu zu starten, als alle Frames und das Menü anzupassen.
 
hi,
das Problem war der java.awt.KeyboardFocusManager. Der hielt noch Referencen auf einige Swing Komponenten, sodass diese nicht aus dem Speicher entfernt werden konnten.

gruß, jacko
 
Zurück