Ciao a tutti.
Ho un problema con una java.util.ConcurrentModificationException che probabilmente si verifica perchè utilizzo nello stesso tempo due iteratori per fare la rimozione di un oggetto.
Praticamente ho una Jtable che visualizza il contenuto di una TreeSet.
In questa TreeSet ci sono degli oggetti di tipo Articolo , ogni articolo ha come attributi tipologia , marca , modello , caratteristiche , quantità , prezzo , codiceArticolo.
Questi oggetti vengono "rappresentati" su un defaultTableModel di Jtable.Ogni riga rappresenta un oggetto ; ogni colonna un suo attributo (tipologia , marca ecc...);
Ho scritto del codice per fare la rimozione di un articolo ;
quello che fa sostanzialmente è di ricavare la riga cliccata , ricavare il codice articolo della riga cliccata , rimuovere l'articolo dalla treeset in base al codice articolo attraverso il metodo rimuoviArticolo(int codice) , rimuovere la riga selezionata.
Il problema è che ogni tanto funziona , ogni tanto lancia l'eccezione java.util.ConcurrentModificationException.
Mi è stato suggerito di utilizzare direttamente il metodo remove(Object o) di treeset.
Non capisco però come utilizzarlo in questo contesto. Mi aiutate?
Ecco il codice che fa il tutto :
codice:
rigaSelezionata = InterfacciaPrincipale.Jtable.getSelectedRow();
valoreCodiceArticolo = InterfacciaPrincipale.modelloJTable.getValueAt(rigaSelezionata, InterfacciaPrincipale.modelloJTable.findColumn("CODICE ARTICOLO")).toString();
InterfacciaPrincipale.Magazzino.rimuoviArticolo(Integer.parseInt(valoreCodiceArticolo));
InterfacciaPrincipale.modelloJTable.removeRow(rigaSelezionata);
InterfacciaPrincipale.textareaEventiMagazzino.append(new Date().toString() + " : " + "\n" + "ARTICOLO RIMOSSO DAL MAGAZZINO : " + "[ " +tipologiaArticolo + " : " +marcaArticolo + " -- " +modelloArticolo +" ] ;" + "\n");
clickBottoneSi.dispose();
Questo è il metodo rimuoviArticolo :
codice:
public boolean rimuoviArticolo(int codiceArticolo) {
boolean rimosso = false;
Iterator<Articolo> it = treeset.iterator();
while(it.hasNext()){
Articolo art = it.next();
int codice = art.getCodiceArticolo();
if(codiceArticolo == codice)
treeset.remove(art);
rimosso = true;
}
return rimosso;
}// RIMUOVI ARTICOLO