Java ArrayList不总是在第一次尝试时添加对象
我有一个应该向其中添加对象的数组列表,但是当我第一次尝试向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
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之外,还有哪些线程正在运行?那些线在干什么?我想你需要展示更多的代码。