gpt4 book ai didi

java - AbstractTableModel 从不同线程更新

转载 作者:行者123 更新时间:2023-11-30 07:39:46 25 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

expect using SwingWorker.

我也期望使用SwingWorker,但您的意思可能是除了 SwingWorker

最佳实践是更新 event dispatch thread 上的 TableModel如图hereJDBCWorker(SwingWorker 的子类)的 process() 实现中。

或者,您可以使用 EventQueue.invokeLater() 更新表的模型,如下所示 here ,但该方法繁琐且容易出错。详情请参阅评论。

关于java - AbstractTableModel 从不同线程更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34844279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com