gpt4 book ai didi

java - 对象的并发修改异常

转载 作者:行者123 更新时间:2023-12-01 17:23:48 26 4
gpt4 key购买 nike

我遇到并发修改异常问题。我已更改代码以使用迭代器,但是当我删除对象时仍然遇到这些问题。我的错误发生在线上

theEnemy = (Enemy) EnemyItr.next();

我不确定如何解决这个问题,因为它是代码中非常重要的一部分。

for (Iterator EnemyItr = activeEnemies.iterator(); EnemyItr.hasNext(); ){

theEnemy = (Enemy) EnemyItr.next();
try {

try {

if (theEnemy.x < 0 && theEnemy.y >= 5) {
activeEnemies.remove(theEnemy);
}
} catch (Exception e) {
System.err.println("Cannot Remove Enemy");
}

Enemy.pathFind(Enemy.getXBlockOfEnemy(theEnemy.x), Enemy.getXBlockOfEnemy(theEnemy.y), theEnemy.x, theEnemy.y);

if (Enemy.right) {
theEnemy.x += Enemy.speed;
//System.out.println("right");
//System.out.println(theEnemy.x + " " + theEnemy.y);
} else if (Enemy.down) {
theEnemy.y += Enemy.speed;
//System.out.println("down");
//System.out.println(theEnemy.x + " " + theEnemy.y);;
} else if (Enemy.up) {
theEnemy.y -= Enemy.speed;
//System.out.println("up");
//System.out.println(theEnemy.x + " " + theEnemy.y);
} else if (Enemy.left) {
theEnemy.x -= Enemy.speed;
//System.out.println("left");
//System.out.println(theEnemy.x + " " + theEnemy.y);
} else {
System.out.println("Enemy Lost.");
//System.out.println(theEnemy.x + " " + theEnemy.y);
}

g.drawImage(enemy, theEnemy.x, theEnemy.y, this);
//System.out.println(Enemy.getXBlockOfEnemy(theEnemy.x));

//drawing health bar
if (Input.displayUI) {
g.setColor(Color.LIGHT_GRAY);
g.fillRect(theEnemy.x, theEnemy.y - 10, 70, 10);
g.setColor(Color.RED);
g.fillRect(theEnemy.x + 2, theEnemy.y - 10 + 1, 68, 8);
g.setColor(Color.GREEN);
g.fillRect(theEnemy.x + 2, theEnemy.y - 10 + 1, (int) (.68 * theEnemy.enemylife), 8);
}

} catch (ConcurrentModificationException e) {
theEnemy = null;
}

}

最佳答案

在迭代集合时从集合中删除元素的唯一机会是使用迭代器本身的remove() 方法。但由于这是一个可选方法,如果您的迭代器不支持删除方法,您可能必须使用此处其他答案的建议。

简而言之:使用迭代器的remove方法而不是集合本身的remove方法。

关于java - 对象的并发修改异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16595218/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com