2011-10-22 114 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