[英]Java ConcurrentModificationException with abstract super class
所以我明白為什么會得到錯誤; 我想知道一個可行的解決方法或替代方法!
因此,我有一個名為SpriteRenderable
的類,該類用於對屏幕上的所有對象進行排序和渲染,其中包含實例的位置和精靈。
public static ArrayList<SpriteRenderable> spriteRenderables;
SpriteRenderable
還具有一個靜態函數Render(SpriteBatch batch)
,該函數循環遍歷此列表以在每個列表上調用update
函數。
public static void Render() {
spriteBatch.begin();
for (ListIterator<SpriteRenderable> iter =
spriteRenderables.listIterator(); iter.hasNext();) {
SpriteRenderable spriteRenderable = iter.next();
spriteRenderable.update(delta);
spriteRenderable.sprite.draw(spriteBatch);
}
spriteBatch.end();
}
public abstract void update();
我還有另一個類Player
,它擴展了SpriteRenderable
類,因此它將自動添加到靜態ArrayList中,並在每個渲染周期更新。 這與“ Gun
與Bullet
類相同。
Gun
類和Bullet
類也擴展了SpriteRenderable
。 在Player
類更新功能中,如果(Gdx.input.isButtonPressed(Input.Buttons.LEFT))
則調用Guns (Gdx.input.isButtonPressed(Input.Buttons.LEFT))
方法,隨后將調用Bullet shot = new Bullet();
(Gdx.input.isButtonPressed(Input.Buttons.LEFT))
在更新播放器之前,它可以正常工作,並且播放器開火; 實例化的項目符號會在自身循環時添加到靜態ArrayList中。 原因:
Exception in thread "LWJGL Application" java.util.ConcurrentModificationException
我試過用try和catch來包圍foreach(SpriteRenderable)循環; 但是由於異常,最終沒有渲染任何精靈。
假設您遍歷列表而不是修改列表,那么使用CopyOnWriteArrayList
會很好。 但是,在迭代器的生存期內,對其進行的任何修改都是不可見的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.