[英]java thread.sleep puts swing ui to sleep too
我正在創建一個簡單的測試應用程序,該應用程序通過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)中運行的檢查結果
您對使UI處於休眠狀態的代碼是正確的。 由於sleep
是在事件調度線程(負責運行gui的線程)上調用的,因此UI會停止處理事件並“進入睡眠狀態”。
我認為您想要的是javax.swing.Timer
。
Timer t = new Timer(1000 * 5, new ActionListener() {
public void actionPerformed(ActionEvent e) {
// do your reoccuring task
}
});
這將導致您的重復任務在EDT之外執行,因此不會使ui失去響應。
如果您發布的代碼在EventDispatchThread上運行,則Swing無法重繪GUI。 您正在阻塞(休眠)應該處理該線程的線程!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.