在非AWT线程中更新AbstractTableModel中的数据的最佳实践

时间:2011-07-12 19:46:44

标签: java multithreading swing jtable abstracttablemodel

我已将AbstractTableModel分类为JTable的模型。每当数据被添加到我在AWT线程中调用fireTableRowsInserted()时。通过使用synchronized方法,可以对我的基础容器进行所有访问。

到目前为止,这种模式对我来说一直很好。但是现在我想从列表中删除数据我已经意识到我有一个线程问题。如果我删除一行并在AWT线程中调用fireTableRowsDeleted(),我仍然可以调用getValueAt()来获取现在不再存在的行索引。

在AWT线程之外的表模型上执行操作的最佳做​​法是什么?

2 个答案:

答案 0 :(得分:5)

恕我直言的最佳做法是避免这样做。从Runnable中的另一个线程中包装对模型的每次访问,并使用SwingUtilities.invokeLater更新模型。

答案 1 :(得分:1)

您必须从EDT中删除数据。任何导致AbstractTableModel触发更改事件的操作都需要在EDT中完成。