AbstractTableModel 从不同的线程更新

AbstractTableModel updating from different threads

我有 class,它实际上是一些数据的列表,它扩展了 AbstractTableModel。此 class 中的数据存储在线程安全的数组列表中。

但是如果我想添加一些数据,假设我在 class 中有这个方法扩展 AbstractTableModel:

public void addData(Data data){
  threadSafeArrayList.add(data);
  fireTableRowsInserted(threadSafeArrayList.size()-1;threadSafeArrayList.size());
}

我应该在美国东部时间调用此方法中的所有内容。 然而,当一些其他线程循环遍历此列表以获取一些数据时,同时 EDT 想要将数据添加到此列表中。然后EDT被屏蔽了。

什么是 add/delte 数据的最佳实践 to/from table 许多其他线程使用的模型期望使用 SwingWorker.

expect using SwingWorker.

我也 期望 使用 SwingWorker,但你的意思可能是 except SwingWorker

最佳做法是在 JDBCWorkerprocess() 实现中更新 event dispatch thread as shown 上的 TableModelSwingWorker 的子类。

或者,您可以使用 EventQueue.invokeLater() 更新 table 的模型,如图 here 所示,但该方法乏味且容易出错。详情见评论。