我正在構建一個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. 從子例程更新進度條
- 3. 從工作線程主線程有時更新進度條不崩潰的Android應用程序
- 4. 從AsyncTaskLoader更新進度條?
- 5. 從IntentService更新進度條?
- 6. 是否可以從主線程顯示和更新進度條?
- 7. 從另一個線程更新petrel中的進度條
- 8. WPF C# - 從另一個線程更新進度條
- 9. 進度條綁定沒有從線程更新
- 10. 從線程啓用和更新進度條
- 11. 進度條更新進度
- 12. C#Toolstrip的進度條和標籤未從跨線程操作更新
- 13. C#WPF從工作線程更新UI
- 14. 使用線程刷新進度條UI
- 15. 線程更新進度條和多個標籤
- 16. 在另一個線程中更新進度條
- 17. C#跨線程調用來更新進度條
- 18. 線程沒有更新進度條控件 - C#
- 19. Android - 使用另一個線程的值更新進度條
- 20. 一個後臺工作線程和多個進度條
- 21. 如何從工作線程更新UI線程中的視圖
- 22. 如何從工作線程/類更新GUI線程/類?
- 23. android - 更新進度條
- 24. 進度條不更新
- 25. Android進度條不更新
- 26. C#進度條不更新
- 27. 如何從服務調用的線程更改活動的進度條進度?
- 28. 更新後臺工作進度條時出現異常
- 29. 從工作線程調用更新UI線程是如何工作的?
- 30. 背景工作進度條
將您的更新發布到EDT上的任何Swing組件。需要鏈接。 – 2011-01-23 00:47:03