我已将AbstractTableModel
分类为JTable
的模型。每当数据被添加到我在AWT线程中调用fireTableRowsInserted()
时。通过使用synchronized方法,可以对我的基础容器进行所有访问。
到目前为止,这种模式对我来说一直很好。但是现在我想从列表中删除数据我已经意识到我有一个线程问题。如果我删除一行并在AWT线程中调用fireTableRowsDeleted()
,我仍然可以调用getValueAt()
来获取现在不再存在的行索引。
在AWT线程之外的表模型上执行操作的最佳做法是什么?
答案 0 :(得分:5)
恕我直言的最佳做法是避免这样做。从Runnable中的另一个线程中包装对模型的每次访问,并使用SwingUtilities.invokeLater
更新模型。
答案 1 :(得分:1)
您必须从EDT中删除数据。任何导致AbstractTableModel
触发更改事件的操作都需要在EDT中完成。