java - 强制 Java 刷新 Java Swing GUI

标签 java multithreading swing events refresh

我编写了两台计算机在黑白棋中互相对战的代码,但是当它们互相对战时。棋盘仅在游戏结束后更新。

通过谷歌搜索,我知道它与 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.SwingWorkerjavax.swing.Timer 并查看 Concurrency in Swing .

关于java - 强制 Java 刷新 Java Swing GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8073823/

相关文章:

windows - 当线程在 SwapBuffers() 中被阻塞时 GetMessage()

java - JFrame 布局不一致

java - 嘿,我有一个关于 Spring 中的依赖注入(inject)和 bean 实例化的问题

java - 使用 Gson 反序列化对象时字段异常的无效值

java - 监控 Windows Server、Java 中的 UDP 数据包丢失

c# - 使用非静态方法的线程

java - 使用 spring 和 hibernate 时,如何处理 session /事务?

multithreading - Cython:使 prange 并行化线程安全

java - 我如何使用数组来制作随机圆圈

java - JProgressBar 不确定线程