我正在構建一個Java程序,從服務器下載N個元素。我想有一個工作進度條,顯示「已下載的元素」/ N個百分比。現在,我通過向線程傳遞對GUI對象的引用來更新進度條值,但它會使代碼變得「醜陋」(GUI類創建線程,該線程包含對GUI本身的引用,從而創建一種循環)。 有沒有更好的方法來做到這一點?從工作線程更新進度條
3
A
回答
5
SwingWorker
具有一定的優勢,在這種情況下,如本example建議。這可能是使用這裏
2
閱讀的JProgressBar API,並按照有關如何使用進度條的工作示例的鏈接Swing指南。
2
爲了去除「循環」。創建一個傳遞給工作線程的GUI擴展接口。
0
一個設計模式是監聽器模式。用工作線程註冊一個進度監聽器。然後,監聽器負責發佈到GUI(或其他任何可能感興趣的進展)。
因爲在這種情況是極不可能的,你有多個監聽器,它往往是最好只具有單一的監聽器(降低複雜性和開銷)。
在我的應用程序,長時間運行的操作,通過傳遞ProgressTracker(:百分比和狀態文本里面有兩個事件類型)調用。這些信息用於更新JProgressBar,JLabel,無論如何......我還使用ProgressTracker檢查操作是否應該取消。
的SwingWorker確實有一些代碼,以合併多個更新幫助 - 但它周圍的假設,長時間運行的任務應該從SwingWorker的,這不利於關注點分離繼承建。這真的取決於你朝哪個方向前進 - 我個人更喜歡對我的數據進行的操作,而與GUI無關。
請記住使用SwingUtilities.invokeLater()
相關問題
- 1. 從線程池c更新進度條#
- 2. 如何在UI線程中工作時更新進度條
- 3. 進度條沒有用線程更新
- 4. 後臺工作線程進度條
- 5. 從子例程更新進度條
- 6. 從工作線程主線程有時更新進度條不崩潰的Android應用程序
- 7. 從AsyncTaskLoader更新進度條?
- 8. 從IntentService更新進度條?
- 9. WPF C# - 從另一個線程更新進度條
- 10. 是否可以從主線程顯示和更新進度條?
- 11. 從線程啓用和更新進度條
- 12. 從另一個線程更新petrel中的進度條
- 13. 進度條綁定沒有從線程更新
- 14. 進度條更新進度
- 15. 線程進度條
- 16. C#Toolstrip的進度條和標籤未從跨線程操作更新
- 17. 更新進度條
- 18. 使用線程刷新進度條UI
- 19. C#WPF從工作線程更新UI
- 20. 從另一個類更新進度條
- 21. WPF最好從BackgroundWorker更新進度條
- 22. 從班的BackgroundWorker更新進度條
- 23. 線程與進度條
- 24. C#跨線程調用來更新進度條
- 25. C#更新沒有阻塞表單線程的進度條
- 26. Android - 使用另一個線程的值更新進度條
- 27. Swing進度條通過Worker更新到EventDispatch線程
- 28. 線程沒有更新進度條控件 - C#
- 29. 在另一個線程中更新進度條
- 30. 線程更新進度條和多個標籤
將您的更新發布到EDT上的任何Swing組件。需要鏈接。 – 2011-01-23 00:47:03