2011-05-05 72 views
1

我有這個JTable,其中我實現了一個自動刷新功能來每1分鐘或(60000l)顯示剩餘時間。JTable在自動刷新機制上插入數據

但是,當要插入的行尚未完成時(數據編碼是在JTable本身上完成的),我遇到了這個問題,數據丟失了。防止任何數據丟失並且不刪除自動刷新功能。

是否可以暫停線程(SwingWorker(Void,Void)用於自動刷新功能)讓位給插入/更新數據不會丟失?

+2

你是什麼意思「數據編碼是在JTable本身上完成的」;這句話看起來像是一種設計氣味......你有一些代碼給我們看?特別是迴轉工人和桌子模型對於檢查是重要的;另外,SwingWorker通常只使用一次,似乎不適合您的用例(自動刷新),您如何使用它? – jfpoilpret 2011-05-05 09:19:06

+0

那麼,我在SwingWorker內部創建了另一個線程(錯誤)。現在讓它成爲一個線程...... – 2011-05-05 09:24:45

+0

當然,你仍然必須記住,JTable(或其TableModel)的更改必須在EDT內執行,所以你的線程必須使用invokeLater/invokeAndWait將其結果填充到UI。 – jfpoilpret 2011-05-05 09:42:08

回答

0

確保自動刷新和更新發生在同一個線程上。這將阻止執行自動刷新,直到完成當前更新。

事件調度線程(EDT)是一個很好的候選者,尤其是Swing已經包含了在EDT上排隊操作的框架。

public void autorefresh() { 
    SwingUtilities.invokeLater(
     new Runnable() { 
      ... 
      // code to request refresh goes here. 
     } 
    ); 
} 
+0

線程確實有一個名爲pause()的受保護方法嗎? – 2011-05-05 09:26:30