ConcurrentModificationException warum ?

florian.

Mitglied
Hallo !
Ich bin neu hier in diesem Forum und habe eine Frage: Warum bekomme ich hier eine ConcurrentModificationException ?
Java:
for(Spiel aSpiel : aktuelleSpiele)	//<------ Hier: ConcurrentModificationException
	{
                int a = 0;
		try
		{		
			int tipp1 = Integer.parseInt(tipps.get(a).getText());			//Tipp1 bekommen
			a ++;
		        int tipp2 = Integer.parseInt(tipps.get(a).getText());			//Tipp2 bekommen
			a ++;
			aktuellerSpieler.addTipp(new Tipp(tipp1, tipp2, aSpiel));			//Neuen Tipp fuer aktuellen Spieler setzen
		}
			catch(NumberFormatException ex)
			{
			JLabel err = new JLabel("Bitte gueltige ganze Zahlen eingeben !");
			panel2.add(err);
			frame.add(panel2);
			frame.setVisible(true);
		        }
	}

Es geht um ein TippSpiel-Programm und die Exception kommt in der markierten Zeile.

Falls ihr zu Beantwortung der Frage das hier braucht:

xception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859)
at java.util.ArrayList$Itr.next(ArrayList.java:831)
at me.florianpfisterer.tippspiel.TippSpiel$SaveTippsListener.actionPerformed(TippSpiel.java:465)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

Vielen Dank schonmal !
gruß Florian
 
Zuletzt bearbeitet:

Kevin94

Top Contributor
Die Exception sagt aus, dass während der Ausführung der Schleife ein anderer (oder auch der selbe Thread) die Liste verändert hat. D.h. meistens steckt der "Fehler" ganz wo anders als die Exception herkommt.
Als mögliche Fehlerstelle im eigenen Thread kommt nur addTipp in Frage, machst du das irgendwas mit der Liste? Ansonsten: was für Threads laufen noch und wo greifen die auf die Liste zu?
 

florian.

Mitglied
Danke für die Antwort erstmal.

Als mögliche Fehlerstelle im eigenen Thread kommt nur addTipp in Frage, machst du das irgendwas mit der Liste?

Mit dieser Liste mache ich eigentlich nichts:
Java:
public void addTipp(Tipp t)
	{
		tipps.add(t);         //ArrayList in der Klasse Spieler
		tspiele.remove(t.getSpiel());     //ArrayList in der Klasse Spieler
	}

Mit Threads kenne ich mich ehrlich gesagt nicht besonders gut aus. Aber ich verändere ja nichts mit der Liste "aktuelleSpiele" ?
 

Ruzmanz

Top Contributor
Ist "aktuelleSpiele" die gleiche Liste wie "tspiele"? Das ist wahrscheinlich der Fehler. Du kannst nicht einfach sagen, dass man über eine Liste von 300 Elemente iterieren soll und dann löscht du mittendrin einfach einen raus.
 
Zuletzt bearbeitet:

florian.

Mitglied
im Prinzip ja aber aktuelleSpiele wird erst danach aktualisiert (auf Basis von tSpiele).
aber danke für den Hinweis, ich schau mir das nochmal genauer an.

und @strußi: stimmt, noch ein Fehler. Danke !
 

florian.

Mitglied
So sieht es jetzt aus (auch mit der aktuelleSpiele-Aktualisierung):
Java:
for(Spiel aSpiel : aktuelleSpiele)			//fuer jedes angezeigte Spiel
			{
				try
				{
					int tipp1 = Integer.parseInt(tipps.get((aktuelleSpiele.indexOf(aSpiel))).getText());	//Tipp1 bekommen
					int tipp2 = Integer.parseInt(tipps.get((aktuelleSpiele.indexOf(aSpiel) + 1)).getText());	//Tipp2 bekommen
					aktuellerSpieler.addTipp(new Tipp(tipp1, tipp2, aSpiel));			//Neuen Tipp fuer aktuellen Spieler setzen
				}
				catch(NumberFormatException ex)
				{
					JLabel err = new JLabel("Bitte gueltige ganze Zahlen eingeben !");
					panel2.add(err);
					frame.add(panel2);
					frame.setVisible(true);
				}
			}
			aktuelleSpiele = aktuellerSpieler.getTSpiele();		//aktuelleSpiele aktualisieren
			genGUI(false);

Aktualisierung passiert aber nach Schleife
 
Zuletzt bearbeitet:

florian.

Mitglied
Ist "aktuelleSpiele" die gleiche Liste wie "tspiele"? Das ist wahrscheinlich der Fehler. Du kannst nicht einfach sagen, dass man über eine Liste von 300 Elemente iterieren soll und dann löscht du mittendrin einfach einen raus.

aber du hast recht, komischerweise funktioniert es wenn ich
Java:
tspiele.remove(t.getSpiel());
auskommentiere.

Okay, vielen Dank jetzt funktioniert es !
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
M ConcurrentModificationException Allgemeine Java-Themen 2
D java.util.ConcurrentModificationException tritt auf Allgemeine Java-Themen 12
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
M ConcurrentModificationException Allgemeine Java-Themen 6
S ConcurrentModificationException Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben