我在类collection
中连续有一个repaint()
JPanel这个循环
while(loop) {
imageicon = (ImageIcon) ois.readObject();
image = imageicon.getImage();
cjpanel.tempimage = image;
cjpanel.repaint();
Thread.sleep(100);
}
和
cjpanel
扩展了我已覆盖paintComponent()
且我正在使用Double buffering
的JPanel@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
tempimage.getScaledInstance(dim.width, dim.height, Image.SCALE_FAST);
bufferGraphics.clearRect(0,0,dim.width,dim.width);
bufferGraphics.drawImage(tempimage,0,0,dim.width,dim.height, null);
g.drawImage(offscreen,0,0,this);
}
我的问题是
repaint
总是在while循环后面落后两帧。即如果image 4
在while
循环中,则paintComponent()
在绘制`image 2。那么,如何在上一个
repaint
完成之前加速repaint
或停止新的repaint
?更新
当我从ObjectInputStream更改图像的大小时,它工作正常。我认为它必须与图像大小有关。
最佳答案
您不应该在while循环中重新读取图像。一次读取图像并将其存储在变量中,可能是诸如ArrayList之类的集合。
根据您的使用方式将它们存储为图像或图标。将图像存储为图像时,无需在Icon上调用getImage()。
不要使用while循环,而应该使用Swing定时器,以免违反Swing线程规则。
您实际上是在寻求调试帮助,“为什么此代码无法按预期工作?”帮助,因此,如果一般建议没有帮助,您确实必须强烈考虑创建并发布最短的代码,以使我们能够编译,运行并帮助确定您的问题,即minimal example program(请检查链接)。否则,除了像我上面所做的一般建议以外,我们将无法提供其他帮助。我同意我的要求不是一件容易或快速的事情,因为这需要您付出很多努力,但是如果您仍然坚持并需要解决方案,那将是值得的努力。由您决定,并且完全取决于您的需要。