Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试从列表中删除元素时的ConcurrentModificationException_Java - Fatal编程技术网

Java 尝试从列表中删除元素时的ConcurrentModificationException

Java 尝试从列表中删除元素时的ConcurrentModificationException,java,Java,嗯,我已经读了其他的帖子,无法解决我的问题。我在ManagedBean中有一个dataTable(JSF)绑定。我有一个选定元素的列表,我想删除这些元素,请参见: public void removeSelected() { for (Map.Entry<Integer, Boolean> entry : registrosSelecionados.entrySet()){ if (entry.getValue() == true){ i

嗯,我已经读了其他的帖子,无法解决我的问题。我在ManagedBean中有一个dataTable(JSF)绑定。我有一个选定元素的列表,我想删除这些元素,请参见:

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();
           }
           }
       }
    }
    }
该Bean已从数据库中删除,但在尝试从“列表”中删除时,出现错误:

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)
编辑1

我试图编辑我的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();
public void deletar(){
试一试{
//对于nulo então capturamos o bean selecionado无数据表,Se este existir
if(bean==null){
if(dataTable==null){
抛出新的运行时异常(“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);
AddInfo消息(“Registro deletado com successo”);
迭代器it=beans.Iterator();
while(it.hasNext()){
Bean b=it.next();
如果(b等于(bean)){
it.remove();
}
}
bean=null;
后移除();
您声明

嗯,我已经读了其他的帖子,无法解决我的问题

如果你读过其他类似的文章,那么你应该已经知道你只能用迭代器删除,这是你没有做的,而这正是你必须做的

e、 g

公共void deltar(迭代器it、Bean){ // ..... it.remove(); } 您声明

嗯,我已经读了其他的帖子,无法解决我的问题

如果你读过其他类似的文章,那么你应该已经知道你只能用迭代器删除,这是你没有做的,而这正是你必须做的

e、 g

公共void deltar(迭代器it、Bean){ // ..... it.remove(); } 您声明

嗯,我已经读了其他的帖子,无法解决我的问题

如果你读过其他类似的文章,那么你应该已经知道你只能用迭代器删除,这是你没有做的,而这正是你必须做的

e、 g

公共void deltar(迭代器it、Bean){ // ..... it.remove(); } 您声明

嗯,我已经读了其他的帖子,无法解决我的问题

如果你读过其他类似的文章,那么你应该已经知道你只能用迭代器删除,这是你没有做的,而这正是你必须做的

e、 g

公共void deltar(迭代器it、Bean){ // ..... it.remove(); }
但是我需要从我的列表中删除这个元素,我如何解决这个问题?@user2776409:当然,使用迭代器来迭代列表。因此,在方法“deletar()”中使用“beans.remove(b)”我应该制作另一个beans.迭代器并删除元素?正确吗?@user2776409:no。您必须调用
remove()
在迭代器对象上(正如我一直在说的那样)。不是在bean上,而是在
it
上。同样,如果您已经完成了声明的搜索,这应该是显而易见的,因为它们都会告诉您完全相同的事情。@user2776409:现在您正在使用不同的迭代器从用于在列表中迭代的迭代器中删除。您必须使用完全相同的迭代器,而不是两个迭代器不同的。但是我需要从我的列表中删除这个元素,我如何解决这个问题?@user2776409:当然,使用迭代器来迭代列表。因此,在方法“deletar()”中使用“beans.remove(b)”我应该生成另一个beans.迭代器并删除元素?正确吗?@user2776409:no。您必须调用
remove()
在迭代器对象上(正如我一直在说的那样)。不是在bean上,而是在
it
上。同样,如果您已经完成了声明的搜索,这应该是显而易见的,因为它们都会告诉您完全相同的事情。@user2776409:现在您正在使用不同的迭代器从用于在列表中迭代的迭代器中删除。您必须使用完全相同的迭代器,而不是两个迭代器不同的。但是我需要从我的列表中删除这个元素,我如何解决这个问题?@user2776409:当然,使用迭代器来迭代列表。因此,在方法“deletar()”中使用“beans.remove(b)”我应该生成另一个beans.迭代器并删除元素?正确吗?@user2776409:no。您必须调用
remove()
在迭代器对象上(正如我一直在说的那样)。不是在bean上,而是在
it
上。同样,如果您已经完成了声明的搜索,这应该是显而易见的,因为它们都会告诉您完全相同的事情。@user2776409:现在您正在使用不同的迭代器从用于在列表中迭代的迭代器中删除。您必须使用完全相同的迭代器,而不是两个迭代器不同的。但是我需要从我的列表中删除这个元素,我如何解决这个问题?@user2776409:当然,使用迭代器来迭代列表。因此,在方法“deletar()”中使用“beans.remove(b)”我应该生成另一个beans.迭代器并删除元素?正确吗?@user2776409:no。您必须调用
remove()
在迭代器对象上(正如我一直在说的那样)。不是在bean上,而是在
it
上。同样,如果您已经完成了声明的搜索,这应该是显而易见的,因为它们都会告诉您完全相同的事情。@user2776409:现在您正在使用不同的迭代器从用于在列表中迭代的迭代器中删除。您必须使用完全相同的迭代器,而不是两个迭代器不同的。这与JSF无关。它是Java SE。在对集合进行迭代时,不能删除集合的元素。该功能由迭代器的remove方法inst合并
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();
public void deltar(Iterator<Bean> it, Bean bean) {
   // ..... 
   it.remove();
}