作者gp123 (George Peng)
看板java
標題Re: [問題] GUI的動作寫在遞迴裡面
時間Wed Jan 2 19:33:15 2013
這個問題很明顯是thread的問題,
由於Swing元件的更新在另一個thread中進行,
而這個thread的優先權很低。
: 我發現函式只會自己跑自己的
: 但JLabel完全沒有反應
: 等到遞迴函式跑完了
: Label才終於顯示最後的狀態
: 可是中途完全沒有任何反應
在你的狀況中,
幾乎要等到遞迴的method執行完後,
才有機會輪到Swing一次更新到最新狀況,
才會造成你看到的結果。
通常不建議在一般的worker thread中直接操作Swing,
長時間的操作中更不合適,
可試著參考
http://slientfreaky.blogspot.tw/2011/09/java-swing.html
的方式,
將你的函式移到GUI的執行緒中進行。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.114.88.144
→ sbrhsieh:把遞迴函式移到 GUI thread 更是錯誤。 01/03 01:05
→ sbrhsieh:正確做法應該是在 worker thread 跑那個遞迴函式 01/03 01:07
→ sbrhsieh:函式中需要操作UI組件,把操作包起來queue到UI thread做 01/03 01:10