2010-04-23 60 views
3

我在傳遞信息,更新的進展和指示「完成」了SwingWorker類是不封裝類的問題。的Java SwingWorker類:​​不作爲封裝

我有一個簡單的類,處理一個硬盤驅動器上的文件和目錄。用戶點擊開始按鈕並啓動SwingWorker的一個實例。

我想打印在從SwingWorker的事件驅動線程上的JTextArea處理的文件的名稱爲更新進度條。 Web上的所有示例都是針對嵌套類的,並且嵌套類訪問外部類中的變量(例如done方法)。我還想指示事件驅動線程SwingWorker已完成,因此EDT可以執行諸如啓動「啓動」按鈕(和清除字段)等操作。

這裏是我的問題: 1.如何把文字變成事件驅動線程的JTextArea和SwingWorker類更新進度條?

  1. EDT如何確定SwingWorker線程完成的時間?

{我不希望SwingWorker作爲嵌套類,因爲有很多代碼(和處理)完成。}

回答

2

A SwingWorker仍然是一個類,您可以擴展並傳遞它需要的任何信息以完成其工作,而不管它是否封裝在另一個類中。所以,你可以在JTextArea傳遞作爲構造「目標文本區域」,將其存儲爲一個成員變量,然後更新在process(List<V>)方法文本區域。

的EDT並不確定當工人完成:工作本身知道它已經完成了作業,因爲doInBackground()方法完成。包裝員工的代碼檢測到doInBackground()的完成,然後在EDT上調用done()方法。 (揮杆工人自動處理線程中的所有變化的能力是使它如此好的一件事情。)

在您的done()實現中,您可以通過觀察者回調通知您的GUI完成對象 - 再次,你可以傳遞給工作者的構造函數。

請參閱本tutorial on SwingWorker有關如何impement不同方法的描述。 progress bars上的路徑包括關於在鞦韆工人中使用進度條的部分。