我有一个实际上是一些数据列表的类,它扩展了AbstractTableModel
。此类中的数据存储在线程安全的arraylist中。
但是如果我想添加一些数据,可以说我在扩展AbstractTableModel
的类中有这个方法:
public void addData(Data data){
threadSafeArrayList.add(data);
fireTableRowsInserted(threadSafeArrayList.size()-1;threadSafeArrayList.size());
}
我应该在EDT上调用此方法中的所有内容。 但是当其他一些线程循环遍历此列表以获取某些数据时,EDT想要将数据添加到此列表中。然后EDT被阻止。
使用SwingWorker
向许多其他线程使用的表模型添加/删除数据的最佳实践是什么。
答案 0 :(得分:1)
期望使用
SwingWorker
。
我也希望使用SwingWorker
,但您可能需要除 SwingWorker
。
最佳做法是在TableModel
的{{1}}实施中event dispatch thread更新here上的process()
,JDBCWorker
是{{1}的子类}}
或者,您可以使用SwingWorker
更新表的模型,如here所示,但该方法繁琐且容易出错。有关详细信息,请参阅注释。