如何修复此代码中的ConcurrentModificationException?

时间:2013-04-14 22:38:51

标签: java for-loop

我正在尝试修复此问题,但无论如何我都无法修复。有人能帮助我吗?

for(Iterator<Block> iterator = event.blockList().iterator(); iterator.hasNext();)
{
    Block b = iterator.next();

    if (((RegiaoCuboid) r).contains(b))
        event.blockList().remove(b);
}

2 个答案:

答案 0 :(得分:3)

使用迭代器删除:

iterator.remove();

当集合以一种使打开的迭代器无效的方式更改时,抛出ConcurrentModificationException。在这种情况下,您直接在集合上调用remove

答案 1 :(得分:-2)

迭代时不能修改List。我建议将你想删除的块添加到一个新列表中,然后迭代它并从主列表中删除它们(编辑:或者,做另一个人说的那样)。另外,如果你正在做我认为你的事情,我会建议在Bukkit论坛上提出进一步的问题。这个问题比较笼统,但熟悉该领域的人更容易回答特定于Bukkit的问题。