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/54043091/

相关文章:

c# - C# 专家的 Java 泛型

java - Socket.io 发出但不触发监听器

c++ - 将写锁降级为读锁时 TMultiReadExclusiveWriteSynchronizer 的行为

Python从线程结束父进程

java - 如何创建 ImageIcon 的实例

java - 如何在Java应用程序中获取机器上的SID列表

java - 欧洲/莫斯科时区提前 1 小时获取不正确的时间

java - CPU 密集型计算示例?

java - DefaultTableModel getValueAt 方法生成看似随机的结果

Java:JDialog 关闭问题