我正在創建一個Swing應用程序來製作遊戲。它在屏幕上隨機創建圖像,當它們離開屏幕時,我想刪除它們。請看看代碼片段:暫停一個線程以防止ConcurrentModificationException?
public void checkTrolls(){ //CAUSES EXCEPTION ERROR WHEN SPRITE EXIT SCREEN
for(AutomatedSprite a : trolls){
if(a.getX() < 0 - a.getImage().getWidth())
trolls.remove(a);
if(a.getY() < 0 - a.getImage().getWidth())
trolls.remove(a);
if(a.getX() > 800)
trolls.remove(a);
if(a.getY() > 600)
trolls.remove(a);
}
}
@Override
public void run() {
long beforeTime, timeDiff, sleep;
beforeTime = System.currentTimeMillis();
while(true){
dodger.update(); //update sprite
if(trolls.size() != 6){
trolls.add(new AutomatedSprite("images/troll_face.png"));
}
for(Sprite troll : trolls){
troll.update(); //UPDATES MY SPRITES
}
checkTrolls(); //CHECKS TROLLS EXITING THE SCREEN
repaint();
for(Sprite troll : trolls){
System.out.println("X: " + troll.getX());
System.out.println("Y: " + troll.getY());
}
timeDiff = System.currentTimeMillis() - beforeTime;
sleep = timeDiff - DELAY;
if(sleep < 0)
sleep = 5;
try {
Thread.sleep(sleep);
} catch (InterruptedException e) { e.printStackTrace(); }
beforeTime = System.currentTimeMillis();
}
}
巨魔是AutomatedSprites的載體,當他們離開屏幕,我得到一個ConcurrentModificationException的,顯然我無法從我的矢量刪除實例。
因此,似乎我無法從線程中刪除任何東西,而線程正在更新我所有的精靈,有沒有辦法暫停我的線程,所以我可以刪除精靈?
P.S:這裏是在情況下,整個班級我錯過了一些東西:Pastebin
使用'synchronized'方法來操縱矢量。 – 2012-01-12 02:30:29