在Java Swing 應用程式中使用Thread.sleep() 時,可能會導致意外行為,例如整個使用者介面(UI) 凍結或變得無回應。發生這種情況是因為 Thread.sleep() 暫停了事件調度執行緒 (EDT)(呈現 Swing 元件的執行緒)的執行。因此,EDT 無法處理事件並更新 UI,導致其顯示為凍結狀態。
在提供的程式碼片段中,使用 Thread.sleep(1000*5) 建立一個迴圈來執行檢查每小時。不幸的是,Thread.sleep() 呼叫會使 EDT 進入睡眠狀態,包括 Swing 元件。這會阻止 UI 更新或響應用戶輸入。
要解決此問題,我們可以改用 javax.swing.Timer。計時器可以安排任務定期執行,與 EDT 無關。這樣可以在不影響 UI 回應能力的情況下定期執行任務。
這是使用計時器的程式碼的更新版本:
Timer t = new Timer(1000 * 5, new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Execute the check
// Update the UI with the check results
}
});
t.start(); // Start the timer
定時器將每五秒執行一次排程任務(檢查),而不阻塞 EDT。在執行檢查時,UI 將保持回應並可供使用者使用。然後,檢查結果可以顯示在 ActionListener 內的 UI 中。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3