抛出java.util.ConcurrentModificationException

时间:2014-05-17 09:05:43

标签: java exception concurrentmodification

所以这是我的蛇游戏代码的功能。基本上我最初做的是通过LinkedList<Point>这是蛇,但因为它抛出异常,我认为使用迭代器更改它会有所帮助。 显然不是。 我怎样才能解决这个问题?

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);
}

1 个答案:

答案 0 :(得分:2)

通常,在迭代迭代时修改集合时会发生此异常。 很可能这意味着snake正在另一个线程中被修改。这个代码是独立考虑的,不应该抛出CME,因此这是唯一可能的解释。

尝试查找snake变量的所有用法,并分析它们是否可以与您发布的代码一起完成。

另一个非常非常不同的可能性是g.fillRect()方法从p集合中删除snake。例如,如果您覆盖了该方法,则可以实现这一点。