2017-02-08 14 views
1

Используя следующий код приведет к java.util.ConcurrentModificationExceptionjava.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

Адрес, на который вы можете позвонить()? Нет причин для удаления элементов по одному через итератор. Вам просто нужно вызвать clear() после того, как вы закончите с повторением списка. – Eran

+0

final AnimationTimer timer = new AnimationTimer() { @Override public void handle (long timestamp) {Все в этом таймере, но я также использую this.stop(); для остановки таймера анимации. – Dynermite

+1

Вы очищаете список из другого потока, чем тот, который выполняет итерацию по списку? Это объясняет исключение. – Eran

ответ

3

Просто вставьте break; после gameOverFunction(); остановить итератор.

Проблема в том, что вы очищаете список, но итератор продолжается, а на следующем next() вызов будет вызываться.

+0

Работал спасибо !!! – Dynermite