java.util.AbstractList $ Itr.checkForComodification错误

时间:2014-01-04 19:11:22

标签: java

每当我尝试删除我的一个实体时,游戏就会给我这个错误,我不知道为什么。

这是创建错误的方法:

public void render (Screen screen) {
    int xTile = 11;
    int yTile = 0;
    int scale = 1;

    screen.render (x, y, xTile + yTile * 32, colour, 0, scale);

    if (level.player != null) {
        int xd = level.player.x - x;
        int yd = level.player.y - y;
        if (xd * xd + yd * yd < 8 * 8) {
            Font.render("Pick up", screen, x - 18, y - 17, Colours.get(-1, -1, -1, 555), 1);
            if (item == true) {
                Font.render("It's true!", screen, x - 18, y - 17, Colours.get(-1, -1, -1, 555), 1);
                level.removeEntity(this);
            }
        }
    }
}

这是removeEntity方法:

public void removeEntity(Entity entity) {
    entities.remove(entity);
}

1 个答案:

答案 0 :(得分:1)

我猜你的其余代码看起来像这样:

for (Entity e : level.entities) {
    e.render();
}

这意味着某个地方,您在迭代level.entities.remove()时调用entities,这会产生ConcurrentModificationExceptionCheckForComodificationError

更简单的解决方案之一是在迭代完成后,将一个单独的项目列表作为一个批处理操作删除:

level.queueRemoveEntity(this);
// .. finish rendering all entities ..
level.entities.removeAll(level.queuedEntities);
level.queuedEntities.clear();