java.util.ConcurrentModificationException - 如何使用迭代器删除

时间:2017-02-08 12:13:54

标签: java javafx iterator

使用以下代码将生成java.util.ConcurrentModificationException

final AnimationTimer timer = new AnimationTimer() {
    @Override
    public void handle(long timestamp) {


        for (ListIterator<myCircle> List = CircleList.listIterator(); List.hasNext(); ) {
            myCirle check = List.next();

            if (CheckCollisionFunction(check) == true) {
                this.stop();
                CircleList.clear();
                gameOverFunction();
            }
        }
    }
} 

所以我使用迭代器来检查我的圈子是否与我的玩家圈子发生碰撞。

当我清除列表时:

CircleList.clear();

我得到了例外。

java.util.ConcurrentModificationException

使用迭代器时,有时会在迭代器之外删除。有人可以告诉我如何使用迭代器删除列表中的所有内容吗?

或另一种阻止此错误的方法。

这是我的清单。

private final ObservableList<myCircle> CircleList = FXCollections.observableArrayList();

1 个答案:

答案 0 :(得分:3)

只需在break;之后插入gameOverFunction();即可停止迭代器。

问题是您清除了列表,但迭代器仍在继续,并且在下一次next()调用时将抛出异常。