Atascado con "java.util.ConcurrentModificationException"
linked-list (2)
Aquí está mi código:
// eventList is a LinkedList
public void run() {
Iterator<Event> it = eventList.iterator();
int size = eventList.size();
while(size > 0) {
while(it.hasNext()) {
Event e = it.next(); //flaged line
if(e.ready()) {
System.out.println(e);
e.action();
eventList.remove(e);
--size;
}
}
}
}
El error java.util.ConcurrentModificationException se arroja a la bandera alineada ( Event e = it.next(); ). ¿Ve un error en mi código que hace obvio el motivo de esa excepción?
Debe eliminar el elemento a través del iterador, de lo contrario, el iterador se restablece porque la colección subyacente cambió.
Está modificando eventList mientras usa eventList.remove() mientras itera sobre él. No debe hacer esto, o el Iterator queda inutilizable.
Simplemente reemplace eventList.remove(e) con it.remove() y debería estar bien.
Además, puede ejecutar fácilmente un bucle sin fin si uno de sus eventos no está listo en la primera ejecución porque it.hasNext() nunca volverá a ser true una vez que haya resultado false , pero el size tampoco se modificará. Una solución sería mover todo el Iterator it = ... línea dentro del primer ciclo while.
También modificaría el bucle while externo para usar while (!e.isEmpty()) lugar de intentar seguir el tamaño de eventList manualmente.