Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ArrayList不总是在第一次尝试时添加对象_Java_Arraylist - Fatal编程技术网

Java ArrayList不总是在第一次尝试时添加对象

Java ArrayList不总是在第一次尝试时添加对象,java,arraylist,Java,Arraylist,我有一个应该向其中添加对象的数组列表,但是当我第一次尝试向ArrayList添加对象时,该对象没有被添加 主要类别: public void keyPressed(KeyEvent e){ char letter = e.getKeyChar(); if(player!=null){ if(letter==' ') { player.dropBomb(bomb); } } } 球员级别: private

我有一个应该向其中添加对象的数组列表,但是当我第一次尝试向ArrayList添加对象时,该对象没有被添加

主要类别:

public void keyPressed(KeyEvent e){
    char letter =  e.getKeyChar();
    if(player!=null){
        if(letter==' ') {
           player.dropBomb(bomb);
        }
     }
}
球员级别:

    private int x,y;
    private int score;
    private Rectangle rect;
    private Color color;
    private Upgrade upgrades;
    private BufferedImage image;
    private int bombCount, bombMax;
    private int bombs;
    private ArrayList<Bomb> bombList;
    private ArrayList<Explosion> explodeList;
    private int power;
    private boolean dead;
    private int lives;



    public Player(int X, int Y,BufferedImage img) {
        x=X;
        y=Y;
        rect=new Rectangle(x+4,y+3,32-4-5,29-3-4);
        bombCount=0;
        bombMax=6;
        bombList=new ArrayList<Bomb>();
        explodeList=new ArrayList<Explosion>();
        power=1;
        image=img;
        dead=false;
        lives=3;
    }

public void dropBomb(BufferedImage bomb){
        out.println("DROPPING "+bombCount);//bombCount is initialized as 0; bombMax is intialized as 6
        if(bombCount<bombMax){
            bombCount++;
            out.println(bombCount+ " "+bombList.size());//bombList is an Arraylist<Bomb>
            bombList.add(new Bomb(x+16,y+16));
            out.println(bombList);
        }
        out.println("DROPPINGTest "+bombCount);
}
第一颗定时炸弹被称为:

DROPPING0
1 0
[]
DROPPINGTest 1
DROPPING1
2 0
[Bomb@e1456c]
DROPPINGTest 2
第二颗定时炸弹叫做:

DROPPING0
1 0
[]
DROPPINGTest 1
DROPPING1
2 0
[Bomb@e1456c]
DROPPINGTest 2
我运行的唯一线程是在主类中。 我在主类中使用线程,我尝试降低和提高线程的睡眠时间,结果没有改变。关于发生这种情况的原因有什么线索吗?此外,在输出的第2行和第3行之间第一次按下投弹时,也有明显的延迟


您可以在以下位置查看我的所有代码:

我认为在您的情况下,并发访问列表可能存在问题。方法“keyPressed”可能由不同的线程调用,因此“dropBomb”也将由不同的线程调用。
如果问题是它,您应该同步“dropBomb”或使用一些线程安全列表实现。

我修复了我的问题。我修正了这个问题,在构建玩家时将其添加到炸弹列表中,然后立即移除新的炸弹

public Player(int X, int Y,BufferedImage img) {
        bombList=new ArrayList<Bomb>();
        explodeList=new ArrayList<Explosion>();
        bombList.add(new Bomb());         //added this line
        bombList.remove(0);               //added this line
    }
公共播放器(int X,int Y,buffereImage img){
bombList=newarraylist();
explodeList=新的ArrayList();
bombList.add(new Bomb());//添加了此行
bombList.remove(0);//添加了此行
}

由于我不知道的原因,第一次添加到arrayList bombList会导致严重延迟,导致bombList被另一种方法清除。

bombList是在哪里构建的?也许它在不同的线程中发生过多次?请告诉我们爆炸列表的类型是什么?@OldCurmudgeon我假设'ArrayList'a)我假设问题出在一些你没有发布的代码中。b) 多线程的关键是正确的同步。阅读
synchronized
关键字什么是
bombCount
?它是静态成员还是实例成员?爆炸清单怎么样?有多少个
Player
实例?您将此问题标记为“多线程”,但除了EDT之外,还有哪些线程正在运行?那些线在干什么?我想你需要展示更多的代码。