0

我们在 GUI 日志中发现了 ConcurrentModificationException 异常,这似乎与更改支持表模型的列表有关。

顺序似乎是:

  1. event1 触发后备列表迭代和更改列表
  2. 更改列表会触发一个中断当前执行的 event2(更改的副产品事件)。 在 event1 的处理结束之前处理此事件
  3. event2 也改变了列表。
  4. event1 获得控制权并继续其迭代,但由于后备列表已更改而崩溃

由于它们都在 EDT 上,如果我在两个地方都使用同步关键字(或锁),event2 会放弃并让 event1 处理继续,还是会创建一个花哨的死锁?

4

1 回答 1

2

似乎与更改支持表模型的列表有关。

您不应该更改列表。所有更新都应直接在模型上完成。

在许多情况下,当您有 ConcurrentModificationExecption 时,您可以将该代码包装在 SwingUtilities.invokeLater() 中,以便将代码添加到 EDT 的末尾,从而允许第一个事件完成处理。

于 2013-10-23T18:03:51.490 回答