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
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.LinkedList$ListItr.checkForComodification(Unknown Source)
at java.util.LinkedList$ListItr.next(Unknown Source)
at juego.Nivel.checkColisiones(Nivel.java:165)
at frontend.GUI_Principal.chekearColisiones(GUI_Principal.java:396)
at frontend.GUI_Principal.game(GUI_Principal.java:378)
at frontend.GUI_Principal.main(GUI_Principal.java:401)
Ahora el codigo de clases, les marco las lineas q indica el error
public class Nivel {
protected java.util.LinkedList<Malo> cMalos;
/**
* Retorna la lista de malos del nivel
* @return
*/
public LinkedList<Malo> getMalos(){
return cMalos;
}
/**
* Retorna la celda x,y
* @param x
* @param y
* @return
*/
public Celda getCelda(int x, int y)
{
return tablero[x][y];
}
/**
* Chekea colisiones en la celda (x,y)
* @param x
* @param y
*/
public void checkColisiones(int x, int y) {
Celda celdaAux = getCelda(x,y);
//Colsion Malo - Fuego
//(LINEA 165)
if(celdaAux.getMalos()!= null && celdaAux.getFuego() == true){
for(Malo m : celdaAux.getMalos()){
m.matar(getBomberman(1));
celdaAux.removeMalo(m);
celdaAux.setfueModificada(true);
}
}
}
}
/**
* Ciclo del juego
*/
public void game() {
inicializar();
//Input de teclado
addKeyListener(this);
timer.start();
while (isVisible() && !b.getMurio()) {
chekearColisiones();
paintTablero();
jLabel2.
setText(Integer.
toString(b.
getScore())); jLabel4.setText(timer.getResult());
g.drawImage(buffer, 0, 0, this);
try {
}
System.
out.
println("te moriste pete"); }
/**
* Chekea las colisiones en todas las celdas de la matriz
*/
private void chekearColisiones() {
for(int i=0;i<n.matriz_width;i++)
for(int j=0;j<n.matriz_height;j++)
//LINEA 396
n.checkColisiones(i, j);
}
public static void main
(String[] args
) { GUI_Principal gui = new GUI_Principal();
gui.game();
}
}