2011-10-22 78 views
1

這可能是一個簡單的,但我已經嘗試了大量不同的東西,無論我嘗試什麼,我都無法得到它的工作。ExecutorService JProgressBar

基本上我有一個JProgressBar,我想更新我處理任務列表。這些任務很短,但有很多這些是我使用ExecutorService的原因。

問題是,我找不到一個很好的方法來監聽ExecutorService有多少任務需要處理。 invokeAll()阻塞,直到所有的任務完成,如果我使用submit()來執行每個任務,任務幾乎完成了它到達JProgressBar的代碼。我甚至嘗試過插入這兩個,但那只是令人討厭的。

有沒有簡單的方法來提交一批任務(實現可調用),然後調用一個execute()方法開始處理?

或者我在這裏看完全錯誤的方向?

謝謝!

回答

1

你可以使用一個ExecutorCompletionServicehttp://download.oracle.com/javase/1,5.0/docs/api/java/util/concurrent/ExecutorCompletionService.html

的文檔頁面上的例子是相當不錯的;)

基本上你只是提交任務服務,然後查詢或取。任務回來後,您可以更新您的JProgressbar

+0

最糟糕的是我記得看到這一次!感謝喚醒;)我看到的唯一問題是,我仍然無法「集體」提交任務。我必須一個一個提交... – PeterM

+0

如何保持一個字段,告訴我們已經提交了多少任務? –

+0

如果您不能一次性提交,則可以限制使用Executors.newFixedThreadPool(nProcs)運行的處理器數量。您可以使用Runtime.getRuntime()。availableProcessors()獲取處理器的數量; – 2011-10-30 03:00:28