由於Thread.sleep()導致Java Swing UI凍結
在Java程式設計中,使用Thread.sleep()可能是一種便捷的方法在執行中建立暫停。然而,當涉及到 Swing 應用程式時,使用 Thread.sleep() 可能會無意中使 UI 進入凍結狀態。
出現此問題的原因是 Thread.sleep() 會阻塞目前執行緒的執行,也就是通常是 Swing 應用程式中的事件排程執行緒 (EDT)。 EDT 負責處理所有 UI 事件,例如按鈕點擊、滑鼠移動和重畫。當 EDT 被休眠執行緒阻塞時,UI 將變得無回應並顯示為凍結狀態。
使用計時器的解決方案
要避免此問題並保持響應式 UI,考慮使用 javax.swing.Timer 而不是 Thread.sleep()。計時器可讓您安排任務在指定的延遲後執行,而不會阻塞 EDT。以下是一個範例:
<code class="java">Timer t = new Timer(1000 * 5, new ActionListener() { public void actionPerformed(ActionEvent e) { // do your recurring task } });</code>
在此範例中,建立計時器以每五秒觸發一個操作事件。然後,指定的操作偵聽器可以執行重複任務,例如檢查目錄是否發生變更。透過使用計時器安排任務,它會在 EDT 之外執行,從而防止 UI 變得無響應。
以上是為什麼使用 Thread.sleep() 時我的 Java Swing UI 會凍結?的詳細內容。更多資訊請關注PHP中文網其他相關文章!