Vector 向量上的ConcurrentModificationError

Vector 向量上的ConcurrentModificationError,vector,thread-safety,concurrentmodification,Vector,Thread Safety,Concurrentmodification,我试图在这里完成的是,每当检测到碰撞时,从向量中删除“blossom”。但是,我不断收到ConcurrentModificationError。当我试图把花从载体上移开时,它就搞砸了。我试过很多方法。有一次,当检测到应该移除花朵时,我保存了它在向量中的位置,然后在查看列表中的下一个位置时尝试移除它。我认为这是你需要了解的唯一方法。有人知道我能做些什么来解决这个问题吗 private synchronized void DrawBlossoms(Canvas c) // method to dra

我试图在这里完成的是,每当检测到碰撞时,从向量中删除“blossom”。但是,我不断收到ConcurrentModificationError。当我试图把花从载体上移开时,它就搞砸了。我试过很多方法。有一次,当检测到应该移除花朵时,我保存了它在向量中的位置,然后在查看列表中的下一个位置时尝试移除它。我认为这是你需要了解的唯一方法。有人知道我能做些什么来解决这个问题吗

private synchronized void DrawBlossoms(Canvas c) // method to draw flowers on screen and test for collision
{
    Canvas canvas = c;
    for(Blossom blossom: blossomVector)
    {
                blossom.Draw(canvas);
                if (blossom.hit(box_x,box_y, box_x + boxWidth, box_y + boxHeight, blossomVector) == true)
                {
                    Log.v(TAG, "REMOVE THIS!");
                    //blossomVector.remove(blossom);

                }
    }
}

解决方案是使用迭代器并对向量进行同步

synchronize(blossomVector)  
{  
    Iterator dataIterator = blossomVector.iterator();  
    while (dataIterator.hasNext())  
    {  
        //... do your stuff here and use dataIterator.remove()

    }  
}  

我一定是执行错了,因为每当我尝试运行这个时,我的屏幕就会变黑。在while循环中,我是否仍然在flowervector上执行foreach?不。其目的是您执行while循环将替换for循环。只需使用迭代器抓取下一个Blossom对象。next(),绘制它。。如果有命中,请使用迭代器将其删除。删除非常感谢!它起作用了!唯一奇怪的是,它在某种程度上绘制了两个对象@。@它将它们都从屏幕上删除。这就像把一朵花画在另一朵花的上面,只有一朵花的一小朵从后面绽放出来。古怪的