【发布时间】:2011-05-12 02:04:05
【问题描述】:
我正在创建一个简单的测试应用程序,它通过 JFileChooser 使用 thread.sleep() 每小时对所选目录运行一次检查。但是当我选择目录并且方法运行时,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(result) 中运行的检查结果
【问题讨论】:
-
可能是
SwingWorker? download.oracle.com/javase/6/docs/api/javax/swing/… -
考虑使用 Timer 和 TimerTask 来运行定时任务。它会更可靠。
-
@Andrew,实际上应该使用
javax.swing.Timer而不是 util 包中的 Timer。 -
@jjnguy,我只是想指出,一般来说,在 while 循环中使用 sleep 并不是一个及时重复任务的好方法,还有一种更可靠的方法。但是,是的,在这种情况下你是正确的。 :P
标签: java multithreading swing