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.SwingWorkerjavax.swing.Timer并看看Concurrency in Swing

09-26 18:44