我编写了两台计算机在黑白棋中互相对战的代码,但是当它们互相对战时。棋盘仅在游戏结束后更新。
通过谷歌搜索,我知道它与 AWT 事件线程有关,但我仍然不知道如何强制 JFrame 刷新。
我的函数通过更改图标然后调用 revalidate 和 repaint 来工作。 任何指针都会很棒。
最佳答案
如果您从 actionPerformed()
开始您的 AI 游戏,它将在 EDT 线程中执行。您应该通过启动一个新的 Thread
将您的逻辑(以及您的 sleep()
的逻辑移到 EDT 线程之外,以允许 Swing 正确地重新绘制 UI 并将更新发布到 UI,如下所示:
SwingUtilities.invokeLater(new Runnable() {
public void run() {
myUI.update(); // repaint(), etc. according to changed states
}
});
同时考虑使用 javax.swing.SwingWorker
、javax.swing.Timer
并查看 Concurrency in Swing .
关于java - 强制 Java 刷新 Java Swing GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8073823/