gpt4 book ai didi

java - 更新 GUI 会产生闪烁效果

转载 作者:行者123 更新时间:2023-12-03 12:51:04 24 4
gpt4 key购买 nike

我目前有一个 JFrame,在它的内容 Pane 中,我以每秒 60 帧的速度从游戏循环中绘制图像。这工作正常,但在右侧,我现在有更多的 Swing 元素,我想在选择内容 Pane 的某些部分时在这些元素上显示一些信息。该部分是静态 GUI,不使用游戏循环。

我正在这样更新它:

public class InfoPanel extends JPanel implements Runnable {
private String titelType = "type: ";
private String type;
private JLabel typeLabel;
private ImageIcon icon;

public void update() {
if (this.icon != null)
this.typeLabel.setIcon(this.icon);

if(this.type != null || this.type != "")
this.typeLabel.setText(this.titelType + this.type);
else
this.typeLabel.setText("");
}

public void run() {
try {
Thread.sleep(150);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.update();
}

(此方法仅在玩家实际移动时调用,因此仅调用一次 - 而不是每秒调用 60 次)

我注意到,当从游戏循环中调用这个 update() 方法时,我得到了闪烁效果。我认为这是因为更新 UI 需要一些时间,所以我决定将其放在一个新线程中。这减少了闪烁,但没有解决它。

接下来,我决定将新线程的优先级设置为低,因为每秒重绘 60 次的屏幕部分更为重要。这再次减少了闪烁,但它仍然发生了。然后,我决定在调用 update() 方法之前在新线程中使用 Thread.sleep(150);,这完全解决了我系统上的闪烁问题。

但是,在其他系统上运行时,还是会发生。不像以前那么频繁(可能每 20 秒一次),但它仍然很烦人。显然,仅在另一个线程中更新 UI 并不能解决问题。

有什么办法可以完全消除闪烁吗?

最佳答案

SwingUtilities.invokeAndWait() 中调用 update() 以停止线程并更新 EDT 中的 UI。

关于java - 更新 GUI 会产生闪烁效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8224422/

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