当另一个线程修改底层集合的时候,如果您正在遍历集合,那么,迭代器就会抛出 ConcurrentModificationException (另一种 RuntimeException)异常...就是说探测到有其他方面也准备修改容器

解决方案 »

  1.   

    问题容易解决的,
    Enumeration enum = session.getAttributeNames();
    Enumeration enumList = enum.clone() ; 
    // 有没有方法clone()不知道,大概是这个意思。就是不要用enum遍历。
    while ( enumList.hasMoreElements()){
        change enum can be work.
    }
      

  2.   

    to yanyanEM(井井井) 
    你的方法不对,虽然没有用enum遍历,但是程序修改的是session,并没有修改Enumeration。
    异常是由于遍历session,并修改session发生的,我把session.removeAttribute(fileTrueName);改为了v.add(fileTrueName);
    v是一个Vector,然后在遍历这个Vector,得到fileTrueName,再删除就好了,但有没有更好一点的方法呢?这样我觉得效率方面差了点,请指教
      

  3.   

    Enumeration enum = session.getAttributeNames();
    Vector v = new Vector();

    if(enum!=null)
    {
    while(enum.hasMoreElements())
    {
    fileTrueName = (String)enum.nextElement();
    fileSaveName = (String)session.getAttribute(fileTrueName);
    if(saveFile(fileSaveName,list_path))
    {
    uf.deleteFile((String)session.getAttribute(fileTrueName));
    v.add(fileTrueName);//先把session的名称保存起来
    }
    else
    {
    throw new UploadFileException();
    }
    }
    }
    //再循环删除session
    Enumeration enumv = v.elements();
    while(enumv.hasMoreElements())
    session.removeAttribute((String)enumv.nextElement());一般都运行正常,没有抛出java.util.ConcurrentModificationException异常,但有时却会抛出这个异常,请问程序那里有错误?该用什么方法解决呢?
      

  4.   

    这是在使用collection类时经常出现的错误。
    在操作collection类时,是不能对size做改变的,不然如何继续遍历。java里就有运行时刻的保护了。
    文件名和保存的文件名换成hashtable放在session里不行吗?