2015-05-29 85 views
0

我正在做一个Swing应用程序,在其中一种形式中,我有一个我想定期更新的表。我首先想到了使用Timer,但这个任务可能很耗时,并且可能会冻结GUI。然后,我想到了使用SwingWorker,但它被设计为执行一次,并且我需要在表单打开时定期执行此任务(每两三分钟)。使用线程实现刷新表

在这种形式的代码,我已经实现了三种方法:acceptNew(),运行快速更新查询,listRequests(),运行一些查询的所有记录,以填补ArrayList;和manipulateTable(),它将表模型与ArrayList进行比较并更新/插入记录。

简而言之,acceptNew()执行快速任务,listRequests()执行另一个任务,其完成时间取决于DB中的记录数,manipulateTable()更新GUI。我需要定期调用这三种方法而不冻结GUI。

+1

1.请whats,在哪里以及为什么要调用'myTimer - > myVoid'和'mySwingWorker - > myVoid'之间存在差异,2.很快所有更新都应在'XxxTableModel'和'myModel.add/insert/updateRow'应该被包装在'invokeLater'里面,3.投票关闭的太宽泛了(关于OPs努力的吨帖子 - 以SSCCE/MCVE形式的代码) – mKorbel

+0

你可以使用多线程来存档这个文件,但是你必须小心执行命令使用同步块.. [示例](http://www.vogella.com/tutorials/JavaConcurrency/article.html) – Ragu

回答

0

您可以使用SwingWorker的publish发出listRequests()的新状态,您可以在process方法中调用manipulateTable()并休眠。

或者只是创建并提交一个新的SwingWorker,每次从定时器更新一次。

+0

谢谢**棘轮怪胎**!我用第二种方法,像魅力一样工作!干杯! – helloworld2013