Erro com Collections: java.util.ConcurrentModificationException

[quote=danilloh]Mais uma opção…

		for (Iterator<Pessoa> iterator = getListaPessoa().iterator(); iterator
				.hasNext();) {

			if (iterator.next().isSelecionado()) {

				iterator.remove();
			}
		}

[/quote]

Funcionou delicia !!! Parabéns… Achei essa aqui mais elegante. abs… :stuck_out_tongue:

Valeu galera!

Eu estava com o mesmo problema e resolvi com o Iterator.

O tempo passa e os iniciantes com os mesmos problemas …

Tava com o problema igual, mas no meu caso eu nao queria remover e sim adiconar elementos num ArrayList.

Tinha um while que era um mainloop de um jogo teste e adicionava elementos num ArrayList de tempos em tempos e chamava o repaint();

no paint eu tinha um for que percorria o ArrayList e desenhava todos os elementos.

Resolvi com

CopyOnWriteArrayList<>();

ficou assim:

[code]while(emJogo){

		cont++;

		//de tempos em tempos adiciona novo bandido
		if(cont > 250){
			Bandido2 bandido = new Bandido2();
			bandido.setisVisible(true);
			bandido.setPosx(1100);
			inimigo.add(bandido);
			cont = 0;
			
		}
		
                // atualiza movimento continuo dos bandidos para esquerda
		for (Iterator<Bandido2> iterator = inimigo.iterator(); iterator.hasNext();) {
			  Bandido2 bandido = (Bandido2) iterator.next();
			  bandido.andarTras();
		}
		
		repaint();

	}
}[/code]

o paint ficou assim:

[code]
public void paint(Graphics g){
//pega copia
Graphics2D g2d = (Graphics2D) g.create();

           //repinta fundo
	g2d.drawImage(fundo, null, 0, 0);
			
	//repinta todos os inimigos inclusive o ultimo acrescentado
	for (Iterator<Bandido2> iterator = inimigo.iterator(); iterator.hasNext();) {
		  Bandido2 bandido = (Bandido2) iterator.next();
		  g2d.drawImage(bandido.getAvatar() ,bandido.getPosx(), 20,null);
	}
		    

	//dicarta copia
	g2d.dispose();
}[/code]

Não é o melhor codigo do mundo, mas to colocando aqui pq era o mesmo problema resovido de forma diferente.

Outra solução possível é criar uma lista do que será adicionado, e só copiar o conteúdo dessa lista para a principal no início do próximo loop. Assim vc também garante que um objeto não participará só de “meio” GameLoop.