AbstractTableModel从不同的线程更新

时间:2016-01-17 22:02:19

标签: java multithreading swing jtable abstracttablemodel

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

但是如果我想添加一些数据,可以说我在扩展AbstractTableModel的类中有这个方法:

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

我应该在EDT上调用此方法中的所有内容。 但是当其他一些线程循环遍历此列表以获取某些数据时,EDT想要将数据添加到此列表中。然后EDT被阻止。

使用SwingWorker向许多其他线程使用的表模型添加/删除数据的最佳实践是什么。

1 个答案:

答案 0 :(得分:1)

  

期望使用SwingWorker

我也希望使用SwingWorker,但您可能需要 SwingWorker

最佳做法是在TableModel的{​​{1}}实施中event dispatch thread更新here上的process()JDBCWorker是{{1}的子类}}

或者,您可以使用SwingWorker更新表的模型,如here所示,但该方法繁琐且容易出错。有关详细信息,请参阅注释。