java - 如何使用 Swing 暂停 Java 模拟

标签 java multithreading swing simulation

好的,我正在运行模拟。我在模拟的 GUI 上实现了两个 JButtons,它们是 actionListeners。我想要的是让整个模拟在我按下暂停按钮时暂停,在我按下恢复按钮时恢复。

有多个线程在运行,我试图获取每个线程并在单击暂停按钮时调用它们的 wait() 方法,但我没有成功。

因此,我需要一些关于如何执行此操作的建议。我在 GUI 中使用 Swing,监听器工作正常。我确实尝试在 View 类的当前线程上调用 sleep() 和 wait()(使用 MVC 模式)只是为了看看发生了什么,但这导致了整个应用程序崩溃。

有什么想法吗?

最佳答案

您需要为模拟线程提供额外的逻辑,以接受来自控制 (GUI) 线程的“信号”并等待下一个控制信号恢复执行。

例如,您可以在模拟线程中使用 volatile boolean isPaused 实例字段。将其设置为 true/false 以暂停/恢复模拟线程。在模拟线程中实现相应的逻辑:

public void run() {
    while (true) {
        simulate();
        while (isPaused) {
            Thread.sleep(100);
        }
    }
}

关于java - 如何使用 Swing 暂停 Java 模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13690339/

相关文章:

java - 我从 jsp 页面获取字符串形式的日期如何将其转换为 java.util.Date

java - java.lang.Thread 中的 single_step 字段是什么意思?

java - JDK 11 和 JavaFX 11 : build for ARM (Tinker Board) not running (hash mismatch)

java - JCheckBox 选中时返回 false

java - 为什么 MouseMotionListener 不起作用?

java - 在 java 中实现一个简单的泛型函数时出现编译错误?

java - 如何使用 Guava 的 LoadingCache 更新存储在缓存中的 LinkedList 值

java - 游戏循环帧独立

java - ConcurrentHashMap 中是否可以有超过 32 个锁

java - 如果 currentTime 位于两个特定时间戳之间