 |
AppletTalk.com Java discussions newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Marco Guest
|
Posted: Mon Nov 27, 2006 11:17 pm Post subject: Strana eccezione: problemi di memoria, credo |
|
|
Ho una classe che memoriza un elenco di Canvas da visualizzare in
successione su un Frame (li memorizzo per evitare di dover ripetere
l'elaborazione ogni volta che vado avanti o indietro di una pagina.
Tutto funziona correttamente finchè il numero delle pagine da
memorizzare non diventa troppo grande, altrimenti capita che l'immagine
del Frame si corrompa, per poi generare la seguente eccezione:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException:
HDC for component
at sun.java2d.loops.DrawGlyphList.DrawGlyphList(Native Method)
at
sun.java2d.pipe.SolidTextRenderer.drawGlyphList(SolidTextRenderer.java:36)
at
sun.java2d.pipe.GlyphListPipe.drawString(GlyphListPipe.java:53)
at sun.java2d.SunGraphics2D.drawString(SunGraphics2D.java:2642)
at scritta.paint(scritta.java:226) // <===
at sun.awt.RepaintArea.paintComponent(RepaintArea.java:248)
at sun.awt.RepaintArea.paint(RepaintArea.java:224)
at
sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:254)
at java.awt.Component.dispatchEventImpl(Component.java:4031)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at
java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234)
at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at
java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
E' sicuramente un problema di memoria; voglio dire che non ci sono
errori nel codice, ma il problema (l'eccezione nel paint della classe
"scritta")
si presenta SOLO se ci sono troppe pagine (diciamo, per esempio, 60
pagine, ognuna formata da 10-15 Canvas, ognuno con un'immagine). Quello
che vorrei è capire come governarla (Quanti Canvas memorizzare, al
massimo? Quante immagini? Che vuol dire, esattamente, HDC for
component?
La cosa strana è che il problema si presenta anche se i frame non
hanno molti contenuti, ma ne visualizzo parecchi in successione con un
codice tipo il seguente:
for (int i=0;i<elenco.size();i++)
{
myclass datiPerFrame=(myclass)elenco.elementAt(i);
java.awt.Frame f=new java.awt.Frame();
myFrame myf=new myFrame(f,datiPerFrame);
try
{
String n=(new BufferedReader(new
InputStreamReader(System.in))).readLine();
if (n.equals("s"))
{i=i+9;}
//salta 9 Frame se digito "s", altrimenti passa semplicemente al
successivo alla pressione di "invio"
}
catch (IOException ex) {}
myf.stopBackground();//causa terminazione thread che calcola in
backround dati per pagine ancora da visualizzare; è pulito, funziona,
e non genera eccezioni
f.removeAll();
f.setVisible(false);
}
Ora, essendo le variabili f e myf definite all'interno del ciclo, mi
aspetterei che venga liberata la memoria per loro allocata quando si
passa al successivo valore di i, dopo f.setVisible(false): invece,
sembra che non sia così, perchè se accumulo diciamo 15-18 frame,
incomincio a riscontrare i problemi che dicevo (corruzione
dell'immagine, poi eccezione), indipendentemente dal fatto di saltarne
qualcuno o meno (in altre parole, il problema non sono i dati del
singolo frame, ma l'accumulo di occupazione di dati in memoria, in
qualche modo, e ciò anche se non compare il classico outOFMemory
Error).
Qualcuno sa darmi qualche consiglio? |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|