PDA

View Full Version : [JAVA] Aiuto java.util.ConcurrentModificationException


Brutale910
05-09-2009, 23:50
ecco il codice


public static void manutenzioneMacchineConfezionamento(String prodotto){
-----------Iterator<Macchina> i = listaMacchine.iterator();
-----------MacchinaConfezionamento macchina;
-----------Macchina macchinaIf;
-----------Set<String> setProdotti;
-----------while(i.hasNext()){
-----------------macchinaIf = i.next();
-----------------if(macchinaIf instanceof MacchinaConfezionamento){
-----------------------macchina = (MacchinaConfezionamento)macchinaIf;
-----------------------setProdotti = macchina.getSetProdotti();
-----------------------Iterator<String> s = setProdotti.iterator();
-----------------------while(s.hasNext()){
-----------------------------if(s.next().equalsIgnoreCase(prodotto)){
-----------------------------------listaManutenzione.add(macchina);
-----------------------------------listaMacchine.remove(macchina);
}

}
}
}
}


ed ecco l' errore


Exception in thread "main" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
at java.util.AbstractList$Itr.next(Unknown Source)
at preparazione.laboratorio.lez11.GestioneMacchine.manutenzioneMacchineConfezionamento(GestioneMacchine.java:176)
at preparazione.laboratorio.lez11.TesterMacchine.main(TesterMacchine.java:140)


sono alle prime armi con java, ne sto preparando l'esame e non riesco a sbrogliare questa situazione non capisco perchè dia errore.......

nuovoUtente86
06-09-2009, 00:08
stai effettuando operazioni di add e remove su una lista mentre vi iteri e questo non è possibile. Le opportunità sono diverse:
-utilizzare una struttura di appoggio
-utilizzare cicli for e strutture indicizzate
-utilizzare LinkedList

Brutale910
06-09-2009, 00:21
stai effettuando operazioni di add e remove su una lista mentre vi iteri e questo non è possibile. Le opportunità sono diverse:
-utilizzare una struttura di appoggio
-utilizzare cicli for e strutture indicizzate
-utilizzare LinkedList

grazie per aver risposto a questa ora della notte

risolto con un ciclo for!

grazie ancora

banryu79
07-09-2009, 12:15
Se iteri una collezione con un iteratore, non puoi modificare le collezione stessa.
O meglio, la puoi modificare ma solo tramite i metodi dell'iteratore stesso.
Cioè se add/remove lo fai con l'iteratore, non parte nessuna eccezione di modifica concorrente.

Inoltre, se "listaMacchine" è un riferimento a un'istanza che implementa List, puoi farti restituire invece che un java.util.Iterator un java.util.ListIterator che supporta maggiori capacità (attraversamento della lista in entrambe le direzioni, casomai ti servisse).