我已经将 AbstractTableModel
子类化,用作我的 JTable
的模型。每当添加数据时,我都会在 AWT 线程中调用 fireTableRowsInserted()
。通过使用同步方法,对我的底层容器的所有访问都是线程安全的。
到目前为止,这种模式对我来说效果很好。但是现在我想从列表中删除数据我已经意识到我有一个线程问题。如果我删除一行并在 AWT 线程中调用 fireTableRowsDeleted()
,我仍然可以为现在不再存在的行索引调用 getValueAt()
。
在 AWT 线程外对表模型执行操作的最佳实践是什么?
最佳答案
恕我直言,最佳做法是避免这样做。将另一个线程对模型的每次访问包装在 Runnable 中,并使用 SwingUtilities.invokeLater
更新模型。
关于java - 在非 AWT 线程中更新 AbstractTableModel 中的数据的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6670128/