2012-10-05 118 views
2

我有一個配置串口連接的swing工作器。這個過程需要不確定的時間才能完成,有時需要1分鐘的時間才能完成。使用Java Swing進行線程處理

我的問題出現在用戶單擊需要配置數據的按鈕,而工作線程仍在配置時。

我想知道如何執行用戶的請求只有當工作線程已完成。否則,如果工作者線程仍然活着,我希望執行等待工作線程完成。

+1

將按鈕的動作的啓用屬性綁定到工作者(成功)的終止f.i.在一個propertyChangeListener給工作人員(如@mKorbel建議) – kleopatra

+0

我以不同的方式解決了這個問題,該按鈕從外部系統獲取數據,因此我不得不將另一個線程放入動作偵聽器的actionPerformed(ActionEvent e)中。 – Lai

+0

很高興你能夠正常工作:-)無論你做什麼,都要確保你只在EDT上訪問所有組件/屬性。 – kleopatra

回答

5
+2

+1基本上是正確的 - 下一個+10會代表一些示例代碼(或者鏈接到您的示例之一:-) – kleopatra

2

你可以檢查你的按鈕ActionEvent如果task.isDone() - 在任務是你SwingWorker - 繼續只有當它是真實的。但你可能想要顯示一個彈出窗口或其他東西,否則用戶可能會困惑爲什麼沒有發生。

另一個簡單的解決方案是在任務運行時將按鈕暴露並將其禁用,並在完成時再次啓用它。然後用戶不能點擊按鈕,直到準備就緒。

+0

還考慮允許按鈕取消工作人員,如[此處]所示(https://sites.google.com/site/drjohnbmatthews/randomdata)。 – trashgod