Caused by: java.util.ConcurrentModificationException

Caused by: java.util.ConcurrentModificationException

报错信息
Caused by: java.util.ConcurrentModificationException
	at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
	at java.util.AbstractList$Itr.next(AbstractList.java:343)
	at com.svw.bnk.peel.formal.FormalPeelUploadResultListAction.getDelpeel(FormalPeelUploadResultListAction.java:158)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.jboss.seam.util.Reflections.invoke(Reflections.java:22)
	at org.jboss.seam.intercept.RootInvocationContext.proceed(RootInvocationContext.java:32)
	at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:56)
	at org.jboss.seam.transaction.RollbackInterceptor.aroundInvoke(RollbackInterceptor.java:28)
	at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
	at org.jboss.seam.core.BijectionInterceptor.aroundInvoke(BijectionInterceptor.java:77)
	at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
	at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:44)
	at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
	at org.jboss.seam.core.SynchronizationInterceptor.aroundInvoke(SynchronizationInterceptor.java:32)
	at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
	at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:107)
	at org.jboss.seam.intercept.JavaBeanInterceptor.interceptInvocation(JavaBeanInterceptor.java:185)
	at org.jboss.seam.intercept.JavaBeanInterceptor.invoke(JavaBeanInterceptor.java:103)
	at com.svw.bnk.peel.formal.FormalPeelUploadResultListAction_$$_javassist_seam_11.getDelpeel(FormalPeelUploadResultListAction_$$_javassist_seam_11.java)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:335)
	at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:348)
	at org.jboss.el.parser.AstBracketSuffix.invoke(AstBracketSuffix.java:63)
	at org.jboss.el.parser.AstValue.invoke(AstValue.java:96)
	at org.jboss.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
	at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
	... 76 more

项目代码:

public void getDelpeel() {
        List<Long> list = getDataGridDataStore().getSelectedId();
        if (list != null) {
            this.formalPeelService.doDelpeel(list);
            addMessage(MessageUtil.getMessage("bnk.peel.formalPeel.delpeelSuccess"));
        }
        @SuppressWarnings("unchecked")
		List<FormalPeel> result = (List<FormalPeel>) this.getSession().getAttribute("fpList");
        for (Long selectedId : list) {
	        for (FormalPeel formalPeel : result) {
	        	if (formalPeel.getId().equals(selectedId)) {
	        		result.remove(formalPeel);
	        	}
	        }
        }
        this.getSession().removeAttribute("fpList");
        // 新的session
        this.getSession().setAttribute("fpList", result);
    }

导致报错代码如下:
在这里插入图片描述
原因:在循环删除时,迭代器的modCount(修改次数)和expectedModCount(期望修改次数)的值不一致。(具体可自行百度)
解决一:迭代器的remove方法中,有一行代码 expectedModCount = modCount; 可以保证在修改之后两个变量的值相等

public void getDelpeel() {
        List<Long> list = getDataGridDataStore().getSelectedId();
        if (list != null) {
            this.formalPeelService.doDelpeel(list);
            addMessage(MessageUtil.getMessage("bnk.peel.formalPeel.delpeelSuccess"));
        }
        @SuppressWarnings("unchecked")
		List<FormalPeel> result = (List<FormalPeel>) this.getSession().getAttribute("fpList");
        Iterator it = result.iterator();
        for (Long selectedId : list) {
            while (it.hasNext()){
                String s = it.next().toString();
                if (s.equals(selectedId)){
                    it.remove(); // 注意这里
                }
            }
        }
        this.getSession().removeAttribute("fpList");
        // 新的session
        this.getSession().setAttribute("fpList", IteratorUtils.toList(it));
    }

解决方法二:该方法是改成索引遍历,但是需要在删除之后保证索引的正常。

public void getDelpeel() {
        List<Long> list = getDataGridDataStore().getSelectedId();
        if (list != null) {
            this.formalPeelService.doDelpeel(list);
            addMessage(MessageUtil.getMessage("bnk.peel.formalPeel.delpeelSuccess"));
        }
        @SuppressWarnings("unchecked")
		List<FormalPeel> result = (List<FormalPeel>) this.getSession().getAttribute("fpList");
        for (Long selectedId : list) {
	        for (int i=0; i < result.size(); i++) {
	        	if (result.get(i).getId().equals(selectedId)) {
	        		result.remove(i);
	        	}
	        }
        }
        this.getSession().removeAttribute("fpList");
        // 新的session
        this.getSession().setAttribute("fpList", result);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值