这个应该是java本身的错误吧?# Java - 爪哇娇娃
b*i
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?
中 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?