java thread.sleep 也使 swing ui 进入休眠状态

标签 java multithreading swing

我正在创建一个简单的测试应用程序,它通过 JFileChooser 使用 thread.sleep() 每小时对选定的目录运行一次检查。但是,当我选择目录并且该方法运行时,用户界面面板变为灰色并且 Swing 位消失。该线程似乎正在使 ui 及其调用的方法进入休眠状态。

if (option == JFileChooser.APPROVE_OPTION) {
    selectedDirectory = chooser.getSelectedFiles();
    try {
        while (true) {
            runCheck(selectedDirectory);
            Thread.sleep(1000*5);//1000 is 1 second
        }
    } catch (InterruptedException e1) {
        Thread.currentThread().interrupt();
        e1.printStackTrace();
    }               
} 

我正在寻找解决此问题的方法,以便我可以打印在 ui .setText(result) 中运行的检查的结果

最佳答案

您关于使 UI 进入休眠状态的代码是正确的。由于在事件调度线程(负责运行 GUI 的线程)上调用了 sleep,因此 UI 停止处理事件并“进入休眠状态”。

我认为你想要的是 javax.swing.Timer .

Timer t = new Timer(1000 * 5, new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        // do your reoccuring task
    }
});

这将导致您的重复任务在 EDT 之外执行,因此不会导致您的用户界面无响应。

关于java thread.sleep 也使 swing ui 进入休眠状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57105424/

相关文章:

java - 在另一个类的框架中启用 Jbutton - GUIBuilder

java - JTextField 正在更新字符串数据和垃圾数据

java - 为什么顶层容器中的覆盖油漆如此糟糕?

java - 如何使用 JSTL 启动静态函数?如何读取字符串?

multithreading - 线程池与线程生成

c# - 如何保证我的 Async 方法线程安全?

Java多线程——加入一个CPU繁重的线程和volatile关键字

java - 限制对数据库操作的并发 Web 服务调用

Java:创建简单的彩票号码生成器

java - 使用 Hibernate 进行数据验证