2015-05-29 52 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