Java 矩形2D#getCenterY导致无关迭代器抛出CME
我目前正在开发一个多线程的游戏,有一个线程运行游戏的更新,还有一个线程重新绘制游戏正在玩的面板。在编辑了一些导致敌人向玩家发射炮弹的代码后,我注意到迭代器发出了ConcurrentModificationException,迭代器正在迭代所有实体并更新它们。我在这里把问题与这句话联系起来:Java 矩形2D#getCenterY导致无关迭代器抛出CME,java,multithreading,concurrency,concurrentmodification,Java,Multithreading,Concurrency,Concurrentmodification,我目前正在开发一个多线程的游戏,有一个线程运行游戏的更新,还有一个线程重新绘制游戏正在玩的面板。在编辑了一些导致敌人向玩家发射炮弹的代码后,我注意到迭代器发出了ConcurrentModificationException,迭代器正在迭代所有实体并更新它们。我在这里把问题与这句话联系起来: getMyBounds2D().getCenterY(); 因为当我将语句更改为: getMyBounds2D().getY(); 该异常不再从更新迭代器中抛出。getMyBounds2D()方法只返回一
getMyBounds2D().getCenterY();
因为当我将语句更改为:
getMyBounds2D().getY();
该异常不再从更新迭代器中抛出。getMyBounds2D()方法只返回一个代表实体边界框的矩形2D,是否有人可以解释为什么更改上述语句会导致CME以及如何解决此问题?您不能在EDT(事件调度线程)之外处理awt/swing对象。各种gui对象都是以单线程方式处理的,仅此线程即可。如果有多个线程处理这些对象,那么会导致各种问题,CME等。您是否在EDT之外处理awt/swing对象?EventDispatchThread调用所有侦听器并绘制吉他的线程迭代器从迭代开始就记住其集合的修改计数。在每一次修改中,它都会检查是否有另一次修改,如果有,则使用CME失败。找到更改的来源。这如何解释如果我更改方法调用,它不会再引发异常的事实?@NeilLocketz-异常是一致的还是零星的?每次我调用getCenterY它都会引发异常,每次我调用getY它都会引发异常doesnt@NeilLocketz-但它不是从该方法内部抛出的是吗?不是从一个完全不相关的方法,所有的更新都在进行