gpt4 book ai didi

java - repaint() JPanel 如果之前的 repaint() 完成

转载 作者:行者123 更新时间:2023-12-01 18:10:40 27 4
gpt4 key购买 nike

我在类collection中有一个循环,它repaint() JPanel连续

    while(loop) {
imageicon = (ImageIcon) ois.readObject();
image = imageicon.getImage();
cjpanel.tempimage = image;
cjpanel.repaint();
Thread.sleep(100);
}

cjpanel扩展了JPanel,我已经覆盖了paintComponent()并且我正在使用双缓冲

@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 更改图像大小时,它工作正常。我认为它必须与图像大小有关..

最佳答案

  1. 您不应该在 while 循环中重新读取图像。读取一次图像并将它们存储在一个变量中,可能是一个集合,例如 ArrayList。
  2. 根据您的使用方式将它们存储为图像或图标。当您可以将图像存储为图像时,无需在图标上调用 getImage()。
  3. 不要使用 while 循环,而应使用 Swing 计时器,以免违反 Swing 线程规则。
  4. 您寻求调试帮助,本质上是“为什么这段代码没有按预期工作?”帮助,因此,如果一般建议没有帮助,您确实必须强烈考虑创建和发布必要的最短代码,以便我们能够编译、运行并帮助识别您的问题,a minimal example program (请检查链接)。否则,除了提供一般性建议之外,我们将无法提供很好的帮助,正如我上面所做的那样。我同意我所要求的事情不会是一件容易或快速的事情,因为它需要你付出相当多的努力,但如果你仍然陷入困境并需要一个解决方案,那么这将是值得的努力。由您决定,并且完全取决于您的需要。

关于java - repaint() JPanel 如果之前的 repaint() 完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33264249/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com