Egy JFrame típusú objektumban akarok egy (csak egy!) JInternalFrame objektumot nyitni. Betettem egy objektum számlálót az osztályba. Ezt az objektum létrehozásakor növelem eggyel és megszüntetésekor csökkentem.
A gond az, hogy a finalize() függvény nem fut le az InternalFrame bezárásakor. Mit kell beállítanom, hogy a finalize() lefusson?
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class MyInternalFrame extends JInternalFrame {
static int openFrameCount = 0;
public MyInternalFrame() {
super("Document #" + (++openFrameCount),
true, //resizable
true, //closable
true, //maximizable
true);//iconifiable
setSize(300,300);
}
@Override
protected void finalize() throws Throwable
{
--openFrameCount;
System.out.println("finalize() lefutott!");
super.finalize();
}
} // end of class
- 943 megtekintés
Hozzászólások
myInternalFrame.dispose();
- A hozzászóláshoz be kell jelentkezni
Akkor kellene lefutnia, amikor valaki bezárja az ablakot (pl. a jobb fölső X jelre kattint).
- A hozzászóláshoz be kell jelentkezni
Az InternalFrameListener internalFrameClosing metódusa szerintem erre pont jó.
- A hozzászóláshoz be kell jelentkezni
Nagyon szépen köszönöm.
Gondolhattam volna, hogy lennie kell egy ilyen Listener-nek! Van egyfajta szabványos logika, ami szerit felépül az egész Java. Jó lenne megszoknom végre!
- A hozzászóláshoz be kell jelentkezni
A finalize() -t a GC hívja akkor, amikor már semmilyen referencia nincs az objektumodra. Szűntesd meg az összes referenciát és akkor talán "finalizálódik" az objektumod(a GC semmilyen garanciát nem ad rá tudomásom szerint). Ha ragaszkodsz ahhoz, hogy csak egyetlen egy ablakod lehessen akkor ajánlom a Singleton pattern-t.
- A hozzászóláshoz be kell jelentkezni
A megoldást már leírták, csak annyi, hogy a finalize() -ra ne nagyon építs! Nincs 100% garantálva, hogy lefut, illetve nem tudhatod, hogy mikor fut le. Ilyen a GC. :)
- A hozzászóláshoz be kell jelentkezni
Kösz!
Egyébként mi az a GC?
- A hozzászóláshoz be kell jelentkezni
Garbage Collector
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Kösz!
Utána olvasok!
- A hozzászóláshoz be kell jelentkezni