JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java SE 討論區  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友   
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 Re:如何讓label能及時更新呢 [Re:gene]
Duncan

還隱隱作痛

版主

發文: 7816
積分: 39
於 2003-07-28 00:34 user profilesend a private message to usersend email to Duncanreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
gene wrote:
我擔心這樣會把code稿的太複雜,因為光是更新一個
Label就要再開一個thread, 實在不想這樣做...

Forth 大大還有其他辦法嗎? 小弟是第一次寫application


你一定是把上面的片段寫在 event listener 的 handler method 裡, 這是不對的設計方式.

把 time-consuming task 拿到獨立的 thread 執行, 不要寫在 listener 的 method 裡(比如 actionPerformed), 這會使得此 time-consuming task 執行在 event-dispatching thread 裡, 自然沒辦法即時更新 UI 的外觀, 因為 event-dispatching thread block 住了. 你改變 label 的 text property, label 會更新外觀至少要 enqueue 一個 repaint 的訊息給 label 以重繪, 可是在你的工作沒完成前 label 收不到這個訊息, 等到你的工作結束了, 先前的眾多 event 可能會被 collapsed, 所以 label 只有重繪一次,顯示的自然是最後的狀態.

如果有數個 thread 都有執行會改變 UI 狀態的操作, 但因為 thread 之間的的相對關係(先後)不是很確定(不一定), UI 的顯示可能不是如你預期的那般, 你可以使用 javax.swing.SwingUtilities - invokeLater 把更新 UI 的操作擺到 event-dispatching thread 的最後頭, 等待 event queue 裡的 event 都處理完了再來執行你要的動作.


reply to postreply to post

給我
辣味豆腐 其餘免談
話題樹型展開
人氣 標題 作者 字數 發文時間
4821 如何讓label能及時更新呢 gene 80 2003-07-27 20:48
4643 Re:如何讓label能及時更新呢 alin 140 2003-07-27 21:50
4294 Re:如何讓label能及時更新呢 gene 683 2003-07-27 23:11
4102 Re:如何讓label能及時更新呢 Forth 26 2003-07-27 23:13
4155 Re:如何讓label能及時更新呢 gene 95 2003-07-27 23:23
5649 Re:如何讓label能及時更新呢 Duncan 787 2003-07-28 00:34
4424 Re:如何讓label能及時更新呢 gene 252 2003-07-28 07:45
4284 Re:如何讓label能及時更新呢 ymshin 1739 2003-07-28 06:29
» JWorld@TW »  Java SE 討論區

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8