问题容易解决的, Enumeration enum = session.getAttributeNames(); Enumeration enumList = enum.clone() ; // 有没有方法clone()不知道,大概是这个意思。就是不要用enum遍历。 while ( enumList.hasMoreElements()){ change enum can be work. }
to yanyanEM(井井井) 你的方法不对,虽然没有用enum遍历,但是程序修改的是session,并没有修改Enumeration。 异常是由于遍历session,并修改session发生的,我把session.removeAttribute(fileTrueName);改为了v.add(fileTrueName); v是一个Vector,然后在遍历这个Vector,得到fileTrueName,再删除就好了,但有没有更好一点的方法呢?这样我觉得效率方面差了点,请指教
Enumeration enum = session.getAttributeNames(); Vector v = new Vector();
Enumeration enum = session.getAttributeNames();
Enumeration enumList = enum.clone() ;
// 有没有方法clone()不知道,大概是这个意思。就是不要用enum遍历。
while ( enumList.hasMoreElements()){
change enum can be work.
}
你的方法不对,虽然没有用enum遍历,但是程序修改的是session,并没有修改Enumeration。
异常是由于遍历session,并修改session发生的,我把session.removeAttribute(fileTrueName);改为了v.add(fileTrueName);
v是一个Vector,然后在遍历这个Vector,得到fileTrueName,再删除就好了,但有没有更好一点的方法呢?这样我觉得效率方面差了点,请指教
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异常,但有时却会抛出这个异常,请问程序那里有错误?该用什么方法解决呢?
在操作collection类时,是不能对size做改变的,不然如何继续遍历。java里就有运行时刻的保护了。
文件名和保存的文件名换成hashtable放在session里不行吗?