我正在做一个Swing应用程序,在其中一种形式中,我有一个我想定期更新的表。我首先想到了使用Timer
,但这个任务可能很耗时,并且可能会冻结GUI。然后,我想到了使用SwingWorker
,但它被设计为执行一次,并且我需要在表单打开时定期执行此任务(每两三分钟)。使用线程实现刷新表
在这种形式的代码,我已经实现了三种方法:acceptNew()
,运行快速更新查询,listRequests()
,运行一些查询的所有记录,以填补ArrayList
;和manipulateTable()
,它将表模型与ArrayList进行比较并更新/插入记录。
简而言之,acceptNew()
执行快速任务,listRequests()
执行另一个任务,其完成时间取决于DB中的记录数,manipulateTable()
更新GUI。我需要定期调用这三种方法而不冻结GUI。
1.请whats,在哪里以及为什么要调用'myTimer - > myVoid'和'mySwingWorker - > myVoid'之间存在差异,2.很快所有更新都应在'XxxTableModel'和'myModel.add/insert/updateRow'应该被包装在'invokeLater'里面,3.投票关闭的太宽泛了(关于OPs努力的吨帖子 - 以SSCCE/MCVE形式的代码) – mKorbel
你可以使用多线程来存档这个文件,但是你必须小心执行命令使用同步块.. [示例](http://www.vogella.com/tutorials/JavaConcurrency/article.html) – Ragu