31. august 2001 - 13:22Der er
4 kommentarer og 1 løsning
JDialog klar til carbage collection ??
Jeg har nogel JDialog\'s, de kan lukkes med x i øverste højre hjørne, og jeg har sat setDefaultCloseOperation(DISPOSE_ON_CLOSE); men yderliger har jeg en close knap, i dens actionPerformed kalder jeg dispose(), men jeg er lidt usikker på hvad den dispose og egentlig gør, jeg vil opnå at objectet er klar til at blive smidt væk når jeg har lukket det, men er det nok med dispose ???
Enhver komponent som har et tilhørende native vindue, dvs. alt nedarvet fra java.awt.Window, herunder JFrame og JDialog bruger nogle resourcer til at tegne deres vinduer med.
Når du kalder dispose, fortæller du det implicit det native system, at du ikke ønsker at bruge dens resourcer mere, og de kan derved frigøres.
Når du er færdig med din JDialog, så kald dispose() og sæt derefter referencen til null, så er vinduet definitivt væk. Hvis du har oprettet din JDialog lokalt i en metode, så er det fint med DISPOSE_ON_CLOSE og dispose() i dit actionevent.
Jeg skal lige være helt sikker !! Jeg kan ikke sætte referencen til null da jeg ikke har den. Dialogen bliver lavet i en actionperformed i en action klasse der nedarver fra AbstractAction. Men hvis der er nok at kalde dispose henholdsvis sætter DISPOSE_ON_CLOSE er det fint. ??
Referencen til din dialog ligger i dit (anonyme) objekt i en actionPerformed metode, jeg går næsten ud fra, at det er en lokal variable a la:
public void actionPerformed(ActionEvent e) { JDialog d = new JDialog(...); d.setvisible(true); }
Så kalder vil din reference d forsvinde, når metoden er færdig, og window manageren vil frigive objektet, når du kalder dispose(), inkl. egen reference, så derfor er det fra da af klar til garbage collection uden yderligere.
Nogle vil sige, at du ikke behøver at dispose() inden den er klar til garbage collection, hvilket også er rigtigt, men du holder system resourcer i for lang tid, hvilket er en uskik (Ligesom man bør close() en fil, socket m.m. når man er færdig med den).
Ok, det er da rigtigt, d er jo glemt efter metoden er færdig, den glemte jeg da lige.. Men man kan vel også bare skrive
new JDialog();
Jeg har prøvet det og det virker fint
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.