我有一個配置串口連接的swing工作器。這個過程需要不確定的時間才能完成,有時需要1分鐘的時間才能完成。使用Java Swing進行線程處理
我的問題出現在用戶單擊需要配置數據的按鈕,而工作線程仍在配置時。
我想知道如何執行用戶的請求只有當工作線程已完成。否則,如果工作者線程仍然活着,我希望執行等待工作線程完成。
我有一個配置串口連接的swing工作器。這個過程需要不確定的時間才能完成,有時需要1分鐘的時間才能完成。使用Java Swing進行線程處理
我的問題出現在用戶單擊需要配置數據的按鈕,而工作線程仍在配置時。
我想知道如何執行用戶的請求只有當工作線程已完成。否則,如果工作者線程仍然活着,我希望執行等待工作線程完成。
添加PropertyChangeListener
到SwingWorker
,那麼你可以決定的status from SwingWorker
have to implemented get()
in the SwingWorker
's method done()
,否則是不可能從調用的方法
得到exeption(S)依賴的代碼,但我懷疑是否有可能改變設置,直到當前線程結束,更好的可能是SwingWorker#cancel()
,然後重新啓動此實例
+1基本上是正確的 - 下一個+10會代表一些示例代碼(或者鏈接到您的示例之一:-) – kleopatra
你可以檢查你的按鈕ActionEvent
如果task.isDone()
- 在任務是你SwingWorker
- 繼續只有當它是真實的。但你可能想要顯示一個彈出窗口或其他東西,否則用戶可能會困惑爲什麼沒有發生。
另一個簡單的解決方案是在任務運行時將按鈕暴露並將其禁用,並在完成時再次啓用它。然後用戶不能點擊按鈕,直到準備就緒。
還考慮允許按鈕取消工作人員,如[此處]所示(https://sites.google.com/site/drjohnbmatthews/randomdata)。 – trashgod
將按鈕的動作的啓用屬性綁定到工作者(成功)的終止f.i.在一個propertyChangeListener給工作人員(如@mKorbel建議) – kleopatra
我以不同的方式解決了這個問題,該按鈕從外部系統獲取數據,因此我不得不將另一個線程放入動作偵聽器的actionPerformed(ActionEvent e)中。 – Lai
很高興你能夠正常工作:-)無論你做什麼,都要確保你只在EDT上訪問所有組件/屬性。 – kleopatra