Ive编码了两台计算机,以在Reversi中相互玩耍,但是当它们相互玩耍时。游戏结束后,棋盘才会更新。
通过一些搜索,我知道它可以执行AWT事件线程,但是我仍然不知道如何强制JFrame刷新。
我的函数通过更改图标然后调用revalidate和repaint来工作。
任何指针都是很棒的。
最佳答案
如果您从actionPerformed()
开始AI游戏,它将在EDT线程中执行。您应该通过启动新的sleep()
将逻辑(和Thread
的代码)移出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。