java.util.ConcurrentModificationException oO?

Amnesia

Grünschnabel
Hey ich bins mal wieder..

Ich habe ein Problem, wo ich nicht weiter weis!

Erstmal der Code:
Code:
	public class loeschenListener implements ActionListener{
		public void actionPerformed (ActionEvent av){
			Integer a;
			
			for (Artikel temp:ArtikelListe){
				if(temp.getId()==(a=(Integer) tabModel.getValueAt(table.getSelectedRow(), 0))){
					ArtikelListe.remove(temp);
				}
				tabModel.removeRow(table.getSelectedRow());
			}
			
			
		}

Ich möchte quasi durch drücken des Buttons eine zeile meiner Tabelle löschen und das zugehörige ARtikel-Objekt aus der ArrayList entfernen. Doch anscheinend kann ich kein Objekt während einer Iteration löschen.
Wie kann ich jetzt mein Problem lösen?

Auf helfende Antworten freue ich mich mal wieder!

Liebe Grüße
Amnesia
 
java.util.ConcurrentModificationExc ...

Hallo,

Einfach keine foreach-Schleife nutzen. Nutze die normale for-Schleife mit einer Zähl-Variablen.

Gruß

Sascha
 
Hi, so kannst du während einer Iteration Elemente löschen:
Java:
       public void actionPerformed (ActionEvent av){
            ListIterator<Artikel> it =  ArtikelListe.listIterator();
            while( it.hasNext() ){
                Artikel temp = (Artikel ) it.next();
                if( temp.getId()==((Integer) tabModel.getValueAt(table.getSelectedRow(), 0))){
                    it.remove();
                    tabModel.removeRow(table.getSelectedRow());
                }
                
            }
            
            
        }
 
Ein häufiger Fallstrick ist auch, dass bei der Verwendung eines Vectors (Threadsafe) diese Exception ebenfalls auftritt, da eine Foreach-Schleife ja auf den Iterator basiert und dieser eben nicht Threadsafe ist.

Viele Grüße

Sebastian
 
Ganz schlechte Idee innerhalb der Schleife: "ArtikelListe.remove(temp);"

Um threadsafe zu bleiben würde ich eine CopyOnWriteArrayList z.B. verwenden und über eine Kopie dieser Liste for-each machen, dann darf's auch "ArtikelListe.remove(temp);" sein.
 
Zurück