抛出java.util.ConcurrentModificationException
这是我的蛇游戏代码中的一个函数。基本上,我最初是在做一个for来遍历抛出java.util.ConcurrentModificationException,java,exception,concurrentmodification,Java,Exception,Concurrentmodification,这是我的蛇游戏代码中的一个函数。基本上,我最初是在做一个for来遍历LinkedList,这就是snake,但是由于它抛出了异常,我认为使用迭代器来更改它会有所帮助。 显然不是。 我怎样才能解决这个问题 public void drawSnake(Graphics g) { g.setColor(Color.green); Iterator<Point> iterator = snake.iterator(); while(iterator.hasNext()
LinkedList
,这就是snake,但是由于它抛出了异常,我认为使用迭代器来更改它会有所帮助。
显然不是。
我怎样才能解决这个问题
public void drawSnake(Graphics g) {
g.setColor(Color.green);
Iterator<Point> iterator = snake.iterator();
while(iterator.hasNext()){
Point p =iterator.next();
g.fillRect(p.x * BOX_WIDTH, p.y * BOX_HEIGHT, BOX_WIDTH, BOX_HEIGHT);
}
g.setColor(Color.black);
}
public void drawSnake(图g){
g、 setColor(Color.green);
迭代器迭代器=snake.Iterator();
while(iterator.hasNext()){
点p=迭代器.next();
g、 fillRect(p.x*框宽,p.y*框高,框宽,框高);
}
g、 设置颜色(颜色为黑色);
}
通常,当集合在迭代过程中被修改时,会发生此异常。
这很可能意味着另一个线程中正在修改snake
。这段代码,单独考虑,不应该抛出CME,所以这是剩下的唯一可能的解释
尝试查找snake
变量的所有用法,并分析它们是否可以与您发布的代码一起使用
另一个非常不同的可能性是
g.fillRect()
方法从snake
集合中删除p
。例如,如果您重写了该方法,则可能发生这种情况。您确定这是引发异常的代码吗?对我来说根本不可能。同意@kviiri,在这个例子中没有修改,所以这不应该引发任何异常。这可能会帮助你@kviiri理解你所说的,因为该函数中没有(至少可见)对snake的修改,但错误指向它:/@Asura14,发布异常的堆栈跟踪后,它可能会有一些有趣的内容。