2011-12-24 150 views
3

我有一个SwingWorker,它在后台执行一些计算(这些操作位于覆盖的doInBackground()方法中)。所以,我也使用​​方法开始计算。如何在完成这些计算后得到结果?SwingWorker得到结果

+0

分享一些代码! – 2011-12-24 16:44:36

+0

现在没有代码。现在我想想如何连接SwingWorker和我的模型以及应用程序的MVC结构视图 – dizpers 2011-12-24 17:02:12

回答

2

覆盖done方法 - 该方法将在工作完成时调用。 Oracle有一个全面的教程在这里:Improve Application Performance With SwingWorker in Java SE 6

还看到另一个SO问题:How do I use SwingWorker in Java?

你可以叫get检索结果,但如果工人没有完成的线程将阻塞,直到工人完成。这意味着如果您从事件调度线程(EDT)调用get,那么如果工作人员没有完成,您的GUI将不会响应。您可以致电isDone以确定工人是否已完成工作。

最后,您可以附加一个属性更改侦听器,以通知工作人员的进度,包括何时完成其任务。我发布的第一个链接就是一个例子。

+0

thx!我会尝试! mayby有一些在MVC中使用SwingWorker的常见模式? – dizpers 2011-12-24 17:10:48

+1

@dizpers,是的 - Swing Worker和它可以从UI中分离出来的工作。将监听器附加到工作人员,并在工作人员完成时更新UI。如果您希望用户界面让用户了解进度,您还可以触发“PropertyChangeEvent”来识别中间进度。 – Paul 2011-12-24 17:17:43

+0

get()正式记录在哪里? – 2015-03-30 16:18:21

4

您可以覆盖done()和/或process(),如herehere所示。

+0

我需要完全返回语句。如果我只是调用我的工人的doInBackground方法,会发生什么? – dizpers 2011-12-24 17:00:30

+2

它会运行,可能会阻止美国东部时间。相反,实例化worker和'execute()'它,如示例中所示。 – trashgod 2011-12-24 17:08:58

+0

@dizpers _什么时候会发生,我只是叫doInBackground_地狱崩溃;-)像往常一样,当你做某些事情**非常错误** - 只需坚持在java文档和关于并发性教程一章中广泛解释的用法Swing – kleopatra 2011-12-25 12:32:43