0

私は現在、マルチスレッドのゲームに取り組んでいます。ゲームの更新を実行するスレッドが 1 つと、ゲームがプレイされているパネルを再描画するスレッドが 1 つあります。敵がプレイヤーに発射物を発射する原因となったコードを編集した後、すべてのエンティティを反復処理して更新している Iterator から ConcurrentModificationException を取得していることに気付きました。ここで、このステートメントに問題を切り分けました。

getMyBounds2D().getCenterY();

ステートメントを次のように変更すると、

getMyBounds2D().getY();

例外は、更新中の Iterator からスローされなくなりました。メソッド getMyBounds2D() は、エンティティの境界ボックスを表す Rectangle2D を返すだけです。上記のステートメントを変更すると CME が発生する理由と、この問題を修正する方法を説明できる人はいますか?

4

1 に答える 1

1

EDT(イベントディスパッチスレッド)の外部でawt/swingオブジェクトをいじることはできません。さまざまなGUIオブジェクトは、このスレッドだけで、シングルスレッド方式で処理されるようになっています。これらのオブジェクトを処理する複数のスレッドがある場合、それはあらゆる種類の問題、とりわけCMEを引き起こします。

于 2013-02-04T15:58:46.393 に答える