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

Cod*_*ddy 1 java swing multithreading jtable abstracttablemodel

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

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

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

JB *_*zet 5

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