Título: ConcurrentModificationException Publicado por: w00t; en 10 Diciembre 2009, 15:22 pm Bueno estoy teniendo un problema al modifcar una lista, me está tirando un error de concurrencia (java.util.ConcurrentModificationException)
El bloque de código que genera problema, es el siguiente Código
Investigué un poco, y encontré que el problema se da por que estoy eliminando elementos de una lista mientras estoy iterando sobre la misma. Una solución a esto es usando el remove del iterador. No me funcionó Y otra usando un bloque syncronized(){...}, pero no sé como aplicarlo Título: Re: ConcurrentModificationException Publicado por: Casidiablo en 10 Diciembre 2009, 16:20 pm Como bien dices, puedes usar syncronized bien sea en cada método en donde accedas a la lista o creando un bloque dentro del método. Aquí tienes una explicación:
http://epere4.blogspot.com/2008/04/cmo-funciona-synchronized-en-java.html Un saludo! Título: Re: ConcurrentModificationException Publicado por: w00t; en 10 Diciembre 2009, 18:48 pm He leído lo que me dejaste, pero sigo sin poder solucionar el problema.
La excepción que se produce es la siguiente Código: Exception in thread "main" java.util.ConcurrentModificationException Por esto entiendo que, cuando la clase Nivel quiso acceder al método checkColisiones() se produjo el error por que ya había un objeto GUI_Principal, accediendo a este por medio de la llamada chekearColisiones(). Como debería aplicar el syncronized? Destaco que nivel, no tiene una referencia al unico objeto del tipo GUI_Principal que hay en ejecución Título: Re: ConcurrentModificationException Publicado por: Leyer en 10 Diciembre 2009, 20:28 pm es complicado ayududate sin el code completo prueba syncronizando el metodo o el obj de class que llamas para el metodo checkColisiones() y si esta en un hilo recuerda syncronizar el metodo run
SL2 Título: Re: ConcurrentModificationException Publicado por: w00t; en 10 Diciembre 2009, 23:47 pm Sinceramente estoy estancado, no encuentro solución. He puesto y sacado syncronized por todos lados ya ^^
Pongo los fragamentos de código de las clases involucradas en el error, no pongo las clases completas por que son cientos de líneas. No quería recurrir a esto de ponerles el código ya que el trabajo de debuggear es mío, pero ya estoy frustado xD El error Código: Exception in thread "main" java.util.ConcurrentModificationException Ahora el codigo de clases, les marco las lineas q indica el error Código
Código
Título: Re: ConcurrentModificationException Publicado por: Leyer en 11 Diciembre 2009, 00:28 am mm pero no veo que nivel este llamando este llamando a checkColisiones().. bueno si dices que colocaste syncronized por todos lados jeje bueno intenta esto cuando la class nivel intente acceder checkColisiones() coloca un wait anterior a las sentencias dond se llama al metodo checkColisiones() en la gui entonces cuando el nivel termine de hacer su "tarea" con el checkColisiones() notificas el la gui para que esta continue..
Saludos. Título: Re: ConcurrentModificationException Publicado por: w00t; en 11 Diciembre 2009, 00:46 am El unico que llama a checkColisiones() es GUI_Principal. Nivel nunca lo llama
Creo q el error se produce por que cuando checkColisiones esta recorriendo/modificando la lista cMalos, hay otro hilo que la esta iterando. Puede ser? Título: Re: ConcurrentModificationException Publicado por: w00t; en 11 Diciembre 2009, 01:06 am Si el problema era ese, encontré la solución acá:
http://www.coderanch.com/t/233932/Threads-Synchronization/java/deal-with-Concurrent-Modification-Exception http://www.javalobby.org/java/forums/t76297.html Seguí esos tips y funcionó todo correctamente! Estaba usando bien el syncronized, pero tenia que eliminar con el remove del iterador ademas de sincronizarlo. Desde ya, gracias por la ayuda L-EYER y Casidiablo. |