2017-02-08 5 views
1

Mit dem folgenden Code wird in einer Folge java.util.ConcurrentModificationExceptionjava.util.ConcurrentModificationException - Wie lösche ich einen Iterator

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(); 
      } 
     } 
    } 
} 

So im ein Iterator zu überprüfen, ob jede meiner Kreise mit meinem Player Kreis kollidieren .

Wenn ich die Liste zu löschen:

CircleList.clear(); 

Ich bekomme die Ausnahme.

java.util.ConcurrentModificationException 

In diesem Fall löschen Sie manchmal außerhalb eines Iterators, wenn Sie einen Iterator verwenden. Kann mir bitte jemand zeigen, wie man alles in meiner Liste mit dem Iterator löscht?

Oder eine andere Möglichkeit, diesen Fehler zu stoppen.

Dies ist meine Liste.

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

Woher rufen Sie clear() ab? Es gibt keinen Grund, Elemente einzeln über den Iterator zu entfernen. Sie müssen nur clear() aufrufen, nachdem Sie mit der Iteration über die Liste fertig sind. – Eran

+0

final AnimationTimer timer = neuer AnimationTimer() { @Override public void handle (langer Zeitstempel) {Alles ist in diesem Timer, aber ich benutze auch this.stop(); um den Animationstimer anzuhalten. – Dynermite

+1

Löschen Sie die Liste von einem anderen Thread als dem, der über die Liste iteriert? Das würde die Ausnahme erklären. – Eran

Antwort

3

einfach ein break; nach gameOverFunction(); legen Sie den Iterator zu stoppen.

Das Problem ist, dass Sie die Liste löschen, aber der Iterator wird fortgesetzt, und beim nächsten Aufruf next() wird die Ausnahme ausgelöst.

+0

Arbeitete dank !!! – Dynermite

Verwandte Themen