java.util.ConcurrentModificationException?
Hi,
Ich bin Processing Anfänger und habe ein Problem und bitte um Ihre Hilfe bei folgendem Fehler.
ConcurrentModificationException
Dieser Fehler tritt bei mir immer wieder auf und makiert folgende Zeile im Code
if (currentState == statePlay2) {
background(255, 255, 255);
--> for (Ball ball : balls) {
ball.move();
ball.display();
}
displayGameText();
// if lives < 0 : dann gameover
if (lives < 0) {
currentState = stateGameOver;
lives = 5;
}
Ich habe eine Art "Spiel" programmiert wo man Bälle zerstören muss und wenn man es nicht rechtzeitig schafft gehen die Bälle von alleine kaputt. Die oben genannte Fehlermeldung kommt immer wenn ein Ball von alleine kaputt geht. Danach stoppt dann das spiel und der Fehler wird in der Konsole angezeigt.
Mit folgendem Code werden die Bälle zerstört bzw entfernt vom Bildschirm und auch von einer ArrayList.
1 Antwort
Wie hier beschrieben ist, darf man eine ArrayList nicht verändern, während man einen Iterator auf dieser verwenden (gilt auch für for each Schleifen): https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html
Falls du nur das aktuelle Element ggf. entfernen willst, geht das mit einem Iterator:
Iterator<Ball> it = balls.iterator();
while (it.hasNext()) {
Ball ball = it.next();
it.remove(); // Aktuelles Element entfernen
}
Ansonsten kann man auch über die Indizes der Liste iterieren, dabei gibt es keine Einschränkungen. Man muss aber den Index anpassen, wenn man vorherige Elemente löscht.