b***i 发帖数: 3043 | 1 一个控制定自定义的SplashWindow的类,定了一个timer.schedule(task, 0, 100);其
中 task=new TimerTask(){.....run(){splashWindow.repaint();},
关闭窗口的时候timer.cancel();然后通过invokeLater调用splashWindow.dispose();
splashWindow=null等,希望gc来析构变量。
splashWindow是属于 private class SplashWindow extends JFrame{
其中构造函数初始化了 canvas= new BufferedImage(....);
}
还有public void paint(Graphics graphics){
if (fImage != null && running) {
Graphics2D g=canvas.createGraphics();
g.drawImage(base, 0, 0, this);
g.drawImage(bf, 0, 0, this);
----〉 graphics.drawImage(canvas, 0, 0, this);
}
}
标记的那一行出了NullPointerException。这是在运行了120多次的时候出现的,应该
就是程序关闭自己定义的SplashWindow这个窗口的时候。
难道变量都null了,该gc来清除了,(timer虽然取消了,但是队列里面可能还有一个,
或者系统还有一个repaint的消息), 窗口发生dispose了,这个时候paint还会被调用?
当然,我可以增加一个变量让paint直接返回。 我想知道这是不是java的问题?还是一
个变量被gc清除的时候,仍然会发生paint?还是我不应该InvokeLater?应该
invokeAndWait? | c*********e 发帖数: 16335 | 2 到stackoverflow上去问。
;
【在 b***i 的大作中提到】 : 一个控制定自定义的SplashWindow的类,定了一个timer.schedule(task, 0, 100);其 : 中 task=new TimerTask(){.....run(){splashWindow.repaint();}, : 关闭窗口的时候timer.cancel();然后通过invokeLater调用splashWindow.dispose(); : splashWindow=null等,希望gc来析构变量。 : splashWindow是属于 private class SplashWindow extends JFrame{ : 其中构造函数初始化了 canvas= new BufferedImage(....); : } : 还有public void paint(Graphics graphics){ : if (fImage != null && running) { : Graphics2D g=canvas.createGraphics();
| b***i 发帖数: 3043 | 3 最后发现是我的错误/
【在 c*********e 的大作中提到】 : 到stackoverflow上去问。 : : ;
|
|