什么是" ConcurrentModificationException"?

时间:2015-05-30 16:34:29

标签: java

这是我的子弹班级

package mainPackage;

import java.awt.Graphics;
import java.awt.image.BufferedImage;

public class Bullets {

    private double x;
    private double y;
    private BufferedImage bulletImage;
    Bullets(double x, double y){
        this.x = x;
        this.y = y;
        ImageLoader loader = new ImageLoader();
        SpriteSheet ss = new SpriteSheet(loader.loadImage("/Pics/TheSpriteSheet.png"));
        bulletImage = ss.grabImage(2, 1, 32, 32);
    }

    public void render(Graphics g){
        g.drawImage(bulletImage, (int)x, (int)y, null);
    }
    public void tick(){
        y--;
    }
    public double getX(){
        return x;
    }
    public double getY(){
        return y;
    }
}

然后我完成了我的BulletQualities课程

package mainPackage;

import java.awt.Graphics;
import java.util.LinkedList;

public class BulletQualities {
    Bullets b;
    private LinkedList<Bullets> bulletList = new LinkedList<Bullets>();

    public void addBullet(Bullets b){
        bulletList.add(b);
    }
    public void tick(){

我在下一行收到错误

        for(Bullets bullet:bulletList){
                if(bullet.getY() == 0)
                removeBullet(bullet);
            bullet.tick();
        }
    }
    public void render(Graphics g){
        for(int x = 0;x < bulletList.size(); x++){
            bulletList.get(x).render(g);
        }
    }
    public void removeBullet(Bullets bullet){
        bulletList.remove(bullet);
    }
}

这是我的错误消息:

Exception in thread "Thread-4" java.util.ConcurrentModificationException
    at java.util.LinkedList$ListItr.checkForComodification(Unknown Source)
    at java.util.LinkedList$ListItr.next(Unknown Source)

然后它只是显示有错误的行。 我不知道为什么它不起作用。请帮我。这意味着很多。 : - )

哦,我差点忘了,这是我的bulletQualities类中的removeBullet方法:

public void removeBullet(Bullets bullet){
    bulletList.remove(bullet);
}

2 个答案:

答案 0 :(得分:0)

由于在迭代列表时删除了一个元素,你得到了这个例外。

for(Bullets bullet:bulletList){
                if(bullet.getY() == 0)
                removeBullet(bullet);  // removing an element during iteration.
            bullet.tick();
        }

`

答案 1 :(得分:0)

当您迭代它时,您正在更改集合,因此也是例外。

请注意,Java8具有new removeIf方法。