1

我已经分类AbstractTableModel用作我的模型JTable。每当添加数据时,我都会fireTableRowsInserted()在 AWT 线程中调用。通过使用同步方法,对我的底层容器的所有访问都是线程安全的。

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

在 AWT 线程之外对表模型执行操作的最佳实践是什么?

4

2 回答 2

5

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

于 2011-07-12T19:52:07.490 回答
1

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

于 2011-07-12T19:55:27.543 回答