簡體   English   中英

Thread.Sleep() 正在凍結

[英]Thread.Sleep() is freezing

這是一個片段

kit.insertHTML(doc, doc.getLength(), "Hello", 0, 0, null);
try{
Thread.sleep(1000);
}catch(Exception e){}

我使用HTMLEditorKit()HTMLDocument()作為文本框。 文本框應顯示“Hello”然后等待一秒鍾,但是,當我嘗試此操作時,它會等待一秒鍾然后輸入“Hello”一詞,這不是我想要的。

我不確定為什么會這樣,因為我按邏輯順序排列了它。 如果有人可以幫助我解決這個問題,那就太好了。

編輯:

有誰知道替代方案,所以我可以使用“延遲”效果?

永遠不要從Swing事件線程中調用Thread.sleep(...),因為這會使事件線程本身進入睡眠狀態。 由於此線程負責所有Swing繪畫和用戶交互,因此這會使您的應用程序進入睡眠狀態。

如果您只想延遲顯示時間,請考慮使用Swing Timer

另一方面,如果您的事件線程被長時間運行的任務所破壞,則使用SwingWorker在后台執行任務(如Guillaume 1+向他建議的那樣)。

您正在EDT(事件調度線程)上調用sleep 您應該避免這種情況,因為確實如此,它會凍結UI。

為了避免這種情況,請改用SwingWorker或按照HFOE的建議使用Swing計時器

Thread.sleep是一項長期運行的任務。 當您在EDT中運行這樣的任務時,它將阻止所有重新繪制請求的執行。 在睡眠階段發送的所有未處理的重塗請求都排隊等待以后的處理。

結果,當EDT退出sleep階段時,它將所有此類重繪請求(如果啟用了合並,這是默認屬性)合並為一個重繪,然后執行該重繪請求。 如果未啟用合並,那么將按順序執行所有排隊的請求,而兩者之間沒有任何時間間隔。 結果,UI似乎沒有更新。

要糾正這種情況,請使用在特定時間間隔后定期觸發的SwingTimerSwingWorker

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM