我正在创建一个简单的测试应用程序,它通过 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/