当前位置: 首页 > 知识库问答 >
问题:

尝试从列表中删除元素时的ConcurrentModificationException[重复]

空英逸
2023-03-14
public void removeSelected() {

    for (Map.Entry<Integer, Boolean> entry : registrosSelecionados.entrySet()){
       if (entry.getValue() == true){
           int id = entry.getKey();
           Iterator<Bean> it = beans.iterator();
           while(it.hasNext()){
           Bean b = it.next();
           if (b.getId().equals(id)){
               setBean(b);
               deletar();
           }
           }
       }
    }
    }
 public void deletar() {
    try {


        //Se o bean for nulo então capturamos o bean selecionado no DataTable, se este existir
        if (bean == null){
        if (dataTable == null){
            throw new RuntimeException("O bean é nulo e não há dataTable vinculado ao ManagedBean. A deleção será abortada");
        }
        bean = (Bean) dataTable.getRowData();
        }

        beforeRemove();
        getBoPadrao().delete((AbstractBean) bean);
        addInfoMessage("Registro deletado com sucesso");
        beans.remove(bean);
        bean = null;
        afterRemove();
    } catch (BOException e) {
        addErrorMessage(e.getMessage());
        FacesContext.getCurrentInstance().validationFailed();
    } catch (Exception e) {
        e.printStackTrace();
        logger.error((new StringBuilder()).append("Erro ao deletar: ")
            .append(e.getMessage()).toString());
        FacesContext.getCurrentInstance().validationFailed();
        addErrorMessage((new StringBuilder()).append("Erro ao deletar. ")
            .append(e.getMessage()).toString());
    }
    }
Jan 31, 2015 5:38:32 PM com.sun.faces.context.AjaxExceptionHandlerImpl handlePartialResponseError
Grave: java.util.ConcurrentModificationException
    at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859)
    at java.util.ArrayList$Itr.next(ArrayList.java:831)
    at br.com.jwebbuild.mb.BasicCrudMBImpl.removeSelected(BasicCrudMBImpl.java:226)

我试图编辑我的deletar()方法,把一个迭代器移除元素,但没有工作,错误继续。

public void deletar() {
    try {


        //Se o bean for nulo então capturamos o bean selecionado no DataTable, se este existir
        if (bean == null){
        if (dataTable == null){
            throw new RuntimeException("O bean é nulo e não há dataTable vinculado ao ManagedBean. A deleção será abortada");
        }
        bean = (Bean) dataTable.getRowData();
        }

        beforeRemove();
        getBoPadrao().delete((AbstractBean) bean);
        addInfoMessage("Registro deletado com sucesso");

        Iterator<Bean> it = beans.iterator();
        while (it.hasNext()) {
        Bean b = it.next();
        if (b.equals(bean)) {
            it.remove();
        }
        }

        bean = null;
        afterRemove();

共有1个答案

丰超
2023-03-14

你说,

嗯,我已经看了其他的帖子,不能解决我的问题。

如果您阅读过其他类似的文章,那么您应该已经知道您只能使用迭代器删除一些您没有做的事情,这正是您必须做的。

public void deltar(Iterator<Bean> it, Bean bean) {
   // ..... 
   it.remove();
}
 类似资料:
  • 我有一个自定义列表类的应用程序。尝试使用customer参数执行foreach函数时,会发生以下情况: 重要!我不能修改主代码 主要内容: XList类: 错误:

  • 问:反转一个列表(自己做方法,不要用集合) 我收到一个错误< code > UnsupportedOperationException 试验 我不明白为什么在< code>list.remove(0)上出现< code > UnsupportedOperationException ;

  • 实际上,在按下一个按钮后,我有一个方法可以检查itemStorico ArrayList中是否存在从itemModel添加的新项,然后如果该项存在于名为itemModel的新列表中,我将从itemStorico中删除旧项并添加新项,否则只添加新项而不删除旧项。 但我得到以下错误: 下面是我的方法中的代码:

  • 问题内容: Google Python类| 清单练习- 给定一个数字列表,返回一个列表,其中所有相邻的==元素都已简化为单个元素,因此[1、2、2、3]返回[1、2、3]。您可以创建一个新列表或修改传入的列表。 我使用新列表的解决方案是- 问题甚至暗示可以通过修改传入列表来完成。但是,python文档警告不要在使用for循环迭代列表时修改元素。 我想知道除了遍历列表之外还能做些什么呢?我不是在寻找

  • 问题内容: 当我运行此代码时,我将抛出ConcurrentModificationException。 当我从列表中删除指定的元素时,列表似乎不知道其大小已更改。 我想知道这是否是集合和删除元素的常见问题? 问题答案: 我相信这是Iterator.remove()方法背后的目的,是能够在迭代时从集合中删除一个元素。 例如:

  • 使用JavaVersion9,我有一些测试代码可以从通过向DefaultListModel传递一个refrence创建的列表中删除一个项目。这就是我所做的。 > 创建DefaultListModel对象 通过调用addelement将8个元素添加到它(A..H)中 通过调用RemoveElement删除项 创建一个Jlist,将我的DefaultListModel的引用传递给它 列表框显示所有8个