2015-05-19 34 views
0
List<ModelElement> elementList; //holds all model element 
List<UUID> selectedElements; 

public ModelElement getElement(UUID id) 
{ 
    ModelElement element = null; 
    for (ModelElement e : elementList){ 
     if (e.getId().equals(id)){ 
      element = e; 
      break; 
     } 
    } 
    return element; 
} 

public void deleteElement(UUID id) 
{ 
    selectedElements.remove(id); 
    elementList.remove(getElement(id)); 
} 

public void deleteElement(List<UUID> ids) 
{ 
    for (UUID id : ids) 
    { 
     deleteElement(id); 
    } 

} 

为什么此代码创建java.util.ConcurrentModificationException? 它工作正常,如果我调用单身份证版本,但如果我使用列表之一崩溃。Java:java.util.ConcurrentModificationException无法解释

+0

我们不能回答,要么除非你发布一个完整的,可运行的程序。你显然在某个地方有多个线程,但是这个代码没有显示什么线程正在使用它。 –

+0

请提供[mcve](http://stackoverflow.com/help/mcve) –

+1

您是否将'selectedElements'传递给'deleteElement'调用?一个简短但完整的程序展示这个问题真的会有帮助... –

回答

2

为了避免CME,请尝试使用迭代器,如果你想打电话deleteElement()selectedElements名单:

public void deleteElement(List<UUID> ids) 
{ 
    Iterator idIter = ids.iterator(); 
    while(idIter.hasNext()) 
    { 
     UUID id = (UUID)idIter.next(); 
     elementList.remove(getElement(id)); 
     idIter.remove();    
    } 
}