我正在创建一个简单的测试应用程序,它使用thread.sleep()通过JFileChooser在所选目录上每小时运行一次检查。但是当我选择目录并且方法运行时,ui面板变为灰色并且摆动位消失。该线程似乎正在让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(结果)中运行的检查结果
答案 0 :(得分:6)
关于让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执行,因此它不会让您的ui无响应。
答案 1 :(得分:1)
如果您发布的代码在EventDispatchThread上运行,则Swing无法重绘GUI。你正在阻止(沉睡)应该处理它的线程!
答案 2 :(得分:1)