2015-05-19 69 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();    
    } 
}