Vsechny komponenty na panelu by se mely v idealnim
pripade zrusit take.
Problem s uvolnenim pameti take muze nastat, kdyz ten
vas panel (nebo nejakou komponentu z toho panelu) pridate nekam
jinam jakozto listener, pak je cela instance drzena mimo tento panel.
Pak je treba takovou komponentu (listener)
opet vyjmout ze "seznamu posluchacu" pomoci metody
removeXXXListener(komponenta).
Toto byva take casty pripad memory leaku, protoze reference
na listener se stale nekde drzi a na prvni pohled neni patrne kde.
petr
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Petr Zajíc
Sent: Tuesday, June 28, 2005 15:58
To: Java
Subject: RE: Swing - problém s komponentou JPanel
JJ,
díky,
taky mě to napadlo. Přidám nějakého posluchače, třeba aby při vyjmutí z
kontejneru ten panel nastavil na NULL. Nevíte, jestli se tím automaticky zruší i
komponenty na tom panelu? (Pokud ne, není to takové neštěstí. Můžu je projít a
zrušit přímo - vím kolik jich je.)
Díky,
Petr Zajíc
-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]On Behalf Of Petr Synek
Sent: Tuesday, June 28, 2005 3:43 PM
To: Java
Subject: RE: Swing - problém s komponentou JPanelthis.setVisible(false);
container.remove(this);
je OK.Je ale treba jeste z nadrazene tridy (tam kde jste vas odvozeny panel vytvoril) nastavit tuto referenci na null.Napr.class NadrazenaTrida {private JPanel panel;public NadrazenaTrida() {this.panel = new MujJPanel();...}}a po zavreni panelu zde (v nadrazene tride) tuto referenci vynulovat.Tj.this.panel = null;Ve vasem pripade je tedy treba nejak notifikovat nadrazenou tridu, ze JPanel byl zrusen a reference na nej se ma vynulovat.Petr
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Petr Zajíc
Sent: Tuesday, June 28, 2005 13:04
To: [email protected]
Subject: Swing - problém s komponentou JPanelPotřebuji poradit (podotýkám, to je začátečnický dotaz, s Javou si hraju pár neděl...)V mojí Swing aplikaci mám třídu, která rozšiřuje JPanel. V určitém okamžiku nahrávám instanci této třídy a umisťuju ji do nějakého containeru. Ta moje třída má na panelu ještě celou řadu hejblat, pár čudlíků a jednu JTable. Ve finále se může jednat o dost velkého žrouta systémových prostředků.Zatím jsem nepřišel na to, jak celou tuto instanci dostat z paměti, když ji nepotřebuji. Scénář je ten, že na panelu je tlačítko, které když zmáčknu, tak potřebuji, aby celý panel zmizel do věčných lovišť, zmizel i z kontejneru a uvolnil místo soudruhům, kteří přijdou po něm. Stávající kód:public void actionPerformed(ActionEvent e) {
if (e.getSource()==cmdOk){
this.setVisible(false);
container.remove(this);
container.revalidate();
}Nevím, ale zdá se mi, že tohle sice moji instanci skryje, ale zůstane i nadále v paměti. Takže mám otázku:Jak to provést (něco jako this=null (špatná syntaxe) nebo dispose(), jenže tuto metodu JPanel nemá...)Předem díky za tipy,Petr Zajíc
________ Information from NOD32 ________
This message was checked by NOD32 Antivirus System for Linux Mail Server.
http://www.nod32.com
