在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 回應能力。
這是使用計時器的程式碼的更新版本:
<code class="java">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</code>
計時器將每 5 次執行排程任務(檢查)秒而不阻塞 EDT。在執行檢查時,UI 將保持回應並可供使用者使用。檢查結果可以在 ActionListener 內的 UI 中顯示。
以上是Thread.sleep() 如何影響 Java Swing 應用程式中的 UI 回應能力?的詳細內容。更多資訊請關注PHP中文網其他相關文章!