我正在制作一个射击游戏作为敌人物体随机向演员射击的项目。但每次敌人随机射击时,都会抛出java.util.ConcurrentModificationException。 这是随机拍摄的代码
public void enemyAttackStrategy() {
// Fire at when at around the 1/4, 1/2 and 3/4 in a random direction
int width = Gui.getInstance().getWidth();
int firstPoint = width / 4 ;
int secondPoint = firstPoint * 2;
int thirdPoint = firstPoint * 3;
int dist = 2;
boolean nearFirst = (getX() - firstPoint) < 3 && (getX() - firstPoint > 0) ;
boolean nearSecond = (getX() - secondPoint) < 3 && (getX() - secondPoint > 0) ;
boolean nearThird = (getX() - thirdPoint) < 3 && (getX() - thirdPoint > 0);
if(nearFirst || nearSecond || nearThird){
//System.out.println("near!!!!!!!!" + (firstPoint) + " " + (secondPoint) + " " + (thirdPoint));
Game.getInstance().enemyShot();
}
以及创建敌人花束的代码
public void enemyShot() {
Bullet bullet = new Bullet("EnemyBullet", "Bullet.png", 14);
bullets.add(bullet);
int minSpeed = -15;
int xPosition = enemyShip.getX();
int yPosition = enemyShip.getY();
int xSpeed = random.nextInt(30) + minSpeed;
int ySpeed = random.nextInt(30) + minSpeed;
addToWorld(bullet, xPosition, yPosition, xSpeed, ySpeed, 2);
//System.out.println("Added Enemy Bullet");
}
这是for循环,它引用了我
public void timer() {
for (Tame oneTame : tames) {
tame.timeTick();//}
}
这是错误
java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:886)
at java.util.ArrayList$Itr.next(ArrayList.java:836)
at GameFrameworkJavaFX.Game.timeTick(Game.java:135)
答案 0 :(得分:2)
如果有两个线程都在修改相同的代码,则可能发生ConcurrentModificationException。如果每个循环都有一个修改数组内容的循环,通常会导致这种情况。有关该特定问题的详细信息,请参阅this question。我不知道这是不是导致问题的原因,但是像@alfasin评论的那样,如果没有看到调用这些方法的代码,我们就无法回答这个问题。
编辑:看到你新发布的代码,看起来很可能就是这种情况。再次,只需查看this question,因为这似乎是其他人具有完全相同类型的错误。