ConcurrentModificationException

Status
Nicht offen für weitere Antworten.
M

Metus

Gast
Hallo,
ich habe ein Problem mit einer Funktion, beim Aufruf wirft der Compiler eine ConcurrentModificationException.
Nach Definition der Exception tritt diese auf, wenn über eine Liste (oder ähnliche Collections) eine Thread iteriert während ein anderer Änderungen vornimmt.

Ich finde in dem Code allerdings keine Stelle, an der das der Fall sein könnte:

Code:
public boolean addResortFeature(String nameFeature)
   {
	   boolean b = false;
	   FeaturesResort addFeature = new FeaturesResort(nameFeature);
	   Iterator it = resortFeatures.iterator();
	   if(resortFeatures.size() <= 0)
   	   {
   		   resortFeatures.add(addFeature);
		   b = true;
   	   }
   	   else if(resortFeatures.size() > 0)
   	   {
		   try
	   	   {
	   		   while(it.hasNext())
	   		   {
	   			   [color=#FF0000]FeaturesResort fr = (FeaturesResort) it.next();[/color]
	   			   if(nameFeature.equals(fr.getNameFeature()))
	   			   {
	   				   throw new FeatureException("Feature schon vorhanden");
	   			   }
	   			   else
	   			   {
	   				   resortFeatures.add(addFeature);
	   				   b = true;
	   			   }
	   		   }
	   	   }
	   	   catch(FeatureException e)
	   	   {
	   		   b = false;
	   	   }
   	   }
   	   return b;
   }

An der rot unterlegten Stelle wird die Exception geworfen. Kann mir jemand sagen warum?

Danke schonmal!
 
G

Guest

Gast
Ich sehe gerade das "rot unterlegen" hat nicht wirklich geklappt, gemeint ist Zeile 17.
"resortFeatures" ist eine LinkedList.
 

Bleiglanz

Gesperrter Benutzer
weil du die Collection veränderst (das add im else zweig)
während du iterierst

nimm einen ListIterator oder löse es anders
 

meez

Top Contributor
Und was ist den mit den zwei adds die du drin hast??

[EDIT] Mist zu langsam...
 

Metus

Mitglied
Mit einem ListIterator bekomme ich genau denselben Fehler. Es kann doch nicht sein, dass ich nichts Ändern kann während ich iteriere, das muss doch irgendwie gehen.
Was mir spontan einfällt wäre die Liste vorher zu kopieren, durch eine zu iterieren und die andere zu ändern, aber das erscheint mir unnötiger Aufwand zu sein.
 

Bleiglanz

Gesperrter Benutzer
du musst dann über den ListIterator dein add machen, nicht bei der Collection!

ListIterator#add

Inserts the specified element into the list (optional operation). The element is inserted immediately before the next element that would be returned by next, if any, and after the next element that would be returned by previous, if any. (If the list contains no elements, the new element becomes the sole element on the list.) The new element is inserted before the implicit cursor: a subsequent call to next would be unaffected, and a subsequent call to previous would return the new element. (This call increases by one the value that would be returned by a call to nextIndex or previousIndex.)
 

Metus

Mitglied
Doh! Ja klar, das hatte ich vergessen, vielen Dank. Hatte gerade schon mit der clone() Methode der LinkedList angefangen.. ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M ConcurrentModificationException Allgemeine Java-Themen 2
D java.util.ConcurrentModificationException tritt auf Allgemeine Java-Themen 12
F ConcurrentModificationException warum ? Allgemeine Java-Themen 7
K Collections java.util.ConcurrentModificationException Allgemeine Java-Themen 3
N ConcurrentModificationException Allgemeine Java-Themen 2
S java.util.ConcurrentModificationException - aber nur ein Thread Allgemeine Java-Themen 3
D java.util.ConcurrentModificationException - per Copy vermeiden Allgemeine Java-Themen 11
D java.util.ConcurrentModificationException bei ArrayList Allgemeine Java-Themen 2
F ConcurrentModificationException Allgemeine Java-Themen 2
P Vectoren bearbeiten: ConcurrentModificationException Allgemeine Java-Themen 4
B ConcurrentModificationException Allgemeine Java-Themen 3
G ConcurrentModificationException - finds nicht Allgemeine Java-Themen 5
S Fehler ConcurrentModificationException Allgemeine Java-Themen 8
R java.util.ConcurrentModificationException vermeiden? Allgemeine Java-Themen 8
R ConcurrentModificationException Allgemeine Java-Themen 9
D ConcurrentModificationException nicht nachvollziehbar Allgemeine Java-Themen 8
K Threading - schreiben auf Hashmap/löschen - ConcurrentModificationException Allgemeine Java-Themen 3
J java.util.ConcurrentModificationException bei HashMap? Allgemeine Java-Themen 2
G ConcurrentModificationException Allgemeine Java-Themen 4
E ConcurrentModificationException Allgemeine Java-Themen 6
R ConcurrentModificationException trotz synchronized? Allgemeine Java-Themen 12
P java.util.ConcurrentModificationException Allgemeine Java-Themen 9
S ConcurrentModificationException Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben