2012-10-05 117 views
2

我有一个配置串口连接的swing工作器。这个过程需要不确定的时间才能完成,有时需要1分钟的时间才能完成。使用Java Swing进行线程处理

我的问题出现在用户单击需要配置数据的按钮,而工作线程仍在配置时。

我想知道如何执行用户的请求只有当工作线程已完成。否则,如果工作者线程仍然活着,我希望执行等待工作线程完成。

+1

将按钮的动作的启用属性绑定到工作者(成功)的终止f.i.在一个propertyChangeListener给工作人员(如@mKorbel建议) – kleopatra

+0

我以不同的方式解决了这个问题,该按钮从外部系统获取数据,因此我不得不将另一个线程放入动作侦听器的actionPerformed(ActionEvent e)中。 – Lai

+0

很高兴你能够正常工作:-)无论你做什么,都要确保你只在EDT上访问所有组件/属性。 – kleopatra

回答

5
+2

+1基本上是正确的 - 下一个+10会代表一些示例代码(或者链接到您的示例之一:-) – kleopatra

2

你可以检查你的按钮ActionEvent如果task.isDone() - 在任务是你SwingWorker - 继续只有当它是真实的。但你可能想要显示一个弹出窗口或其他东西,否则用户可能会困惑为什么没有发生。

另一个简单的解决方案是在任务运行时将按钮暴露并将其禁用,并在完成时再次启用它。然后用户不能点击按钮,直到准备就绪。

+0

还考虑允许按钮取消工作人员,如[此处]所示(https://sites.google.com/site/drjohnbmatthews/randomdata)。 – trashgod