我一直很难找到答案,但我不知道我做错了什么.我正在学习如何使用JAVA线程.事情是我在做太空船游戏.我有一个创建enemys的方法(那些enemys被添加到一个ArrayList中,它被绘制以使运动效果更好,效果很好).我有另一个方法,在这个ArrayList中查找那些已经死亡的敌人(死是一个布尔值,如果敌人在屏幕上消失或者被杀死,它会变为真),如果它们是(死的)它会从ArrayList中释放它们(不是再画了).我有一个使用createEnemy方法的线程(它工作正常).问题来了,我需要使用这个ereaseEnemy方法但是它给了我和并发错误,我尝试在两种方法上使用synchronized但是ereaseEnemy方法永远不会开始工作.不知道如何解决这个问题.我停止第一个线程(创建者)使另一个工作?我在这里错过了一些东西吗?谢谢!
删除敌人的代码
for (Enemigo enemigo1 : enemigos) {
if (!enemigo1.isEstaVivo()) { enemigos.remove(enemigo1); }
}
Run Code Online (Sandbox Code Playgroud)
你真的应该发布有问题的代码,但我可以做出有根据的猜测:你正在迭代ArrayList你正在调用的循环内部list.remove(o).抛出的异常是ConcurrentModificationException.List.remove()迭代时不允许调用任何方法; 你必须使用Iterator.remove().这排除了针对此用例使用增强的for循环.将您的代码更改为
for (Iterator<Enemigo> iter = enemigos.iterator(); iter.hasNext();)
if (!iter.next().isEstaVivo()) iterator.remove();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
496 次 |
| 最近记录: |