-1
我有一個渲染方法和一個用於滴答世界的方法。因爲它們有時同時運行,所以在循環Tiles時出現ConcurrentModificationException異常。Java - 在渲染和打勾方法中設置修改瓷磚
public void render(Graphics gfx)
{
bounds.setLocation(getEdgeX(), getEdgeY());
for(Tile tile : tiles)
{
if(bounds.intersects(tile.getBounds()))
{
activeTiles.add(tile);
tile.render(gfx);
}
}
translate(gfx);
int x = platformer.getX() - platformer.getX() % background.getWidth();
gfx.drawImage(background, x, 0, null);
gfx.drawImage(background, x + Platformer.SCREEN_SIZE.width, 0, null);
platformer.render(gfx);
}
public void tick()
{
platformer.tick();
for(Tile tile : activeTiles) //Exception
{
if(tile instanceof AdvancedTile)
{
((AdvancedTile)tile).tick();
}
}
}
異常
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:926)
at java.util.HashMap$KeyIterator.next(HashMap.java:960)
at me.lordal.platformer.world.World.tick(World.java:59)
at me.lordal.platformer.world.WorldManager.tickCurrentWorld(WorldManager.java:55)
at me.lordal.platformer.screens.GameScreen.tick(GameScreen.java:41)
at me.lordal.platformer.screens.CardHandler.tick(CardHandler.java:60)
at me.lordal.platformer.Platformer.update(Platformer.java:65)
at me.lordal.platformer.Platformer.run(Platformer.java:53)
at me.lordal.platformer.Platformer.main(Platformer.java:25)
正如你所看到的渲染方法有它增加了瓷磚設定的某一部分,而滴答滴答的方法有瓷磚循環以及。
我該如何解決這個問題?
現在你已經改變了你的文章中的所有內容,並且使我正在刪除的答案無效。請發佈[mcve]。 –