0

我目前正在开发一款多线程游戏,一个线程运行游戏更新,一个线程重新绘制正在玩游戏的面板。在编辑了一些负责敌人向玩家发射射弹的代码后,我注意到我从迭代器中获得了 ConcurrentModificationException,该迭代器正在迭代所有实体并更新它们。我在这里将问题与此语句隔离:

getMyBounds2D().getCenterY();

因为当我将语句更改为:

getMyBounds2D().getY();

更新迭代器不再抛出异常。getMyBounds2D() 方法只返回一个代表实体边界框的 Rectangle2D,有没有人可以解释为什么更改上面的语句会导致 CME 以及如何解决这个问题?

4

1 回答 1

1

您不能在 EDT(事件调度线程)之外处理 awt/swing 对象。各种 gui 对象旨在以单线程方式处理,仅由该线程处理。如果您有多个线程处理这些对象,那么这将导致各种问题,CME 等等。

于 2013-02-04T15:58:46.393 回答