多執行緒程式畫出狀態回報狀態, 一直是令人頭痛的問題.
這東西不管是在 Windows 或 Java Programming 都會遇到.
總之,
讓程式的 main thread 負責使用者 UI 的動作, 其他需要一點時間的工作, 放在新的 thread 執行, 應該是一個很好的程式設計模型.
例如: while 或 loop 很久的副程式, 就應該放在新的 thread 中執行, 然後回報工作進度.
在 Windows 你可以用 PostMessage 來回報工作 thread 狀態.
然而, Java 呢?
請服用 invokeLater.
只要餵給他一個 工作 thread 物件, 他會在適當的時機, 把進度顯示的繪圖指令, 安排到系統中, 進行顯示.
下面是一個例子:
public class AA{
xxxMethod(){
SwingUtilities.invokeLater(new JobTask());
// 繼續執行其他使用者介面工作
}
}
class JobTask implements Runnable{
JLabel myLabel;
public void run(){
while(true){
// 高耗時工作
...
myLabel.setText("回報進度");
}
}
public JobTask(JLabel label){
mylabel=label;
}
}
by Jing
您好, 謝謝您的例子讓我了解這個function的作用
回覆刪除但例子中function名字拚錯了invodeLater (d -> k)
提醒您一下
感謝!
Fixed!
回覆刪除Thank you bluemonkey.
Jing.