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 に答える