簡體   English   中英

Java ConcurrentModificationException與抽象超類

[英]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中,並在每個渲染周期更新。 這與“ GunBullet類相同。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM