2010-07-16 68 views
2

我有一個開始和停止按鈕。我被告知我必須使用SwingWorker。我現在的代碼工作正常。我開始並停止它。但是如果我想再次啓動它呢?我讀到doinBackground方法將只執行一次。有沒有辦法將它再次熄滅.. ??有沒有辦法多次啓動和停止SwingWorker ..?

現在我不能創建一個Swing Worker的新實例,因爲在我的Swing Worker中我有一個while循環,當while(isSet)被設置爲True時,當我點擊Start按鈕時設置爲False,當我點擊停止按鈕。

有沒有解決這個問題的方法.. ??

謝謝

回答

5

的SwingWorker的API文檔回答你的問題:

的SwingWorker僅設計爲 執行一次。多次執行SwingWorker 不會導致 調用doInBackground方法 兩次。

SwingWorker API docs

你需要每個啓動按鈕被按下時創建一個新的SwingWorker實例。

0

如您所說,每個SwingWorker都被設計爲執行一次。在這方面,每個對象代表一次執行。

因此,一個有效的(也可能是最直接的)方法就是爲每次單擊開始按鈕創建一個新的SwingWorker,如果您確實想要生成每個操作的實例時間。

+0

我不能這樣做。當我點擊開始按鈕時,我在那裏設置了一個布爾值。在doinBackground()方法中,我循環了一些東西,直到它被設置爲false(當你點擊停止按鈕時)。如果我每次創建一個新實例,我都不知道這個布爾值何時被標記。 – Biggs 2010-07-16 16:17:59

+0

你應該編輯你的問題來解釋這一點。 – DJClayworth 2010-07-16 16:32:56

+0

DJClayworth ....謝謝我編輯了我的問題。你能否給我提供你所指的基本代碼片段..? (即有一個對象封裝SwingWorker)..謝謝..! – Biggs 2010-07-16 18:59:55

1

我會建議有一個對象封裝SwingWorker。當按下「go」按鈕時,該對象會創建一個SwingWorker並將其設置。當設置「停止」標誌時,SwingWorker會自行完成並告訴封裝對象它已完成。當再次按下「go」按鈕時,封裝對象將創建一個新的SwingWorker,依此類推。

+0

這聽起來正是我想要做的。你可以發佈這個代碼示例.. ??謝謝 – Biggs 2010-07-16 17:06:13

+0

只是尋找一個非常基本的例子。謝謝 – Biggs 2010-07-16 18:01:25

相關問題