Path: csiph.com!usenet.pasdenom.info!aioe.org!eternal-september.org!feeder.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Knute Johnson Newsgroups: comp.lang.java.programmer Subject: Odd ConcurrentModificationException Date: Tue, 10 Dec 2013 09:41:27 -0800 Organization: A noiseless patient Spider Lines: 87 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Tue, 10 Dec 2013 17:41:25 +0000 (UTC) Injection-Info: mx05.eternal-september.org; posting-host="aba33539224e5c782fe0c4053f7756fd"; logging-data="6141"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19CyiOGugn77cEAsNPHUzGx" User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:24.0) Gecko/20100101 Thunderbird/24.1.1 Cancel-Lock: sha1:oji8A14TfOrsKY4MdltlBFUf9v0= Xref: csiph.com comp.lang.java.programmer:26827 I'm getting an odd ConcurrentModificationException in a MouseListener when I try to remove an element from an ArrayList. The really strange thing about it is that the exception occurs every other time I call remove(). The ArrayList is only accessed on the EDT and I tried wrapping it in Collections.synchronizedList but that made no difference. The ArrayList variable is boxes and the type is DisplayBox, an extended JComponent. The error shows the line number of the for instruction but actually fails on the remove(box) call. Any ideas on where to start looking? Thanks, knute... public void mousePressed(MouseEvent me) { if (me.getButton() == MouseEvent.BUTTON1) { System.out.println("Mouse1 Down"); mouseDown = true; startX = me.getX(); startY = me.getY(); } else if (me.getButton() == MouseEvent.BUTTON3) { System.out.println("Mouse3 Down"); for (DisplayBox box : boxes) { if (box.getBounds().contains(me.getX(),me.getY())) { remove(box); boxes.remove(box); } } repaint(); } } Mouse3 Down Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(Unknown Source) at java.util.ArrayList$Itr.next(Unknown Source) at com.knutejohnson.stationcasinos.backgroundgenerator.Yard$1.mousePress ed(Yard.java:47) at java.awt.Component.processMouseEvent(Unknown Source) at javax.swing.JComponent.processMouseEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Window.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access$200(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Sour ce) at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Sour ce) at java.awt.EventQueue$4.run(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Sour ce) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source) -- Knute Johnson