1
我有這個JTable,其中我實現了一個自動刷新功能來每1分鐘或(60000l)顯示剩餘時間。JTable在自動刷新機制上插入數據
但是,當要插入的行尚未完成時(數據編碼是在JTable本身上完成的),我遇到了這個問題,數據丟失了。防止任何數據丟失並且不刪除自動刷新功能。
是否可以暫停線程(SwingWorker(Void,Void)用於自動刷新功能)讓位給插入/更新數據不會丟失?
我有這個JTable,其中我實現了一個自動刷新功能來每1分鐘或(60000l)顯示剩餘時間。JTable在自動刷新機制上插入數據
但是,當要插入的行尚未完成時(數據編碼是在JTable本身上完成的),我遇到了這個問題,數據丟失了。防止任何數據丟失並且不刪除自動刷新功能。
是否可以暫停線程(SwingWorker(Void,Void)用於自動刷新功能)讓位給插入/更新數據不會丟失?
確保自動刷新和更新發生在同一個線程上。這將阻止執行自動刷新,直到完成當前更新。
事件調度線程(EDT)是一個很好的候選者,尤其是Swing已經包含了在EDT上排隊操作的框架。
public void autorefresh() {
SwingUtilities.invokeLater(
new Runnable() {
...
// code to request refresh goes here.
}
);
}
線程確實有一個名爲pause()的受保護方法嗎? – 2011-05-05 09:26:30
你是什麼意思「數據編碼是在JTable本身上完成的」;這句話看起來像是一種設計氣味......你有一些代碼給我們看?特別是迴轉工人和桌子模型對於檢查是重要的;另外,SwingWorker通常只使用一次,似乎不適合您的用例(自動刷新),您如何使用它? – jfpoilpret 2011-05-05 09:19:06
那麼,我在SwingWorker內部創建了另一個線程(錯誤)。現在讓它成爲一個線程...... – 2011-05-05 09:24:45
當然,你仍然必須記住,JTable(或其TableModel)的更改必須在EDT內執行,所以你的線程必須使用invokeLater/invokeAndWait將其結果填充到UI。 – jfpoilpret 2011-05-05 09:42:08