Я пытаюсь написать игру, поэтому каждый кадр, в котором я вызываю метод doDraw (), где я использую итератор, чтобы перебрать все объекты GameObject и вывести их на экран:
Iterator<GameObject> itr = mObjList.iterator();
while (itr.hasNext()) {
GameObject obj = itr.next(); // this line gives me the error
...
// print object
}
Единственный метод, который добавляет элемент в список, это:
public void click(int x, int y) {
// adds new object to the list on a click event
mObjList.add(new GameObject(x, y));
}
В большинстве случаев это работает. Но иногда я получаю эту ошибку:
java.util.ConcurrentModificationException
Из строки с "itr.next ()". Из того, что я гуглил, я подумал, что это потому, что событие click () иногда происходит до того, как draw () заканчивает рисовать каждый объект, поэтому он меняет список, пока его использует итератор. Я полагаю, что это не так?
Но я не разбираюсь с темами. Как я мог это исправить? Может быть, я делаю все это неправильно, и я должен использовать совершенно другой метод для печати всех объектов на экране?