arraylist java.util.ConcurrentModificationException从其他类初始化
我得到以下异常堆栈跟踪:arraylist java.util.ConcurrentModificationException从其他类初始化,java,arraylist,Java,Arraylist,我得到以下异常堆栈跟踪: Exception in thread "main" java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901) at java.util.ArrayList$Itr.next(ArrayList.java:851) at Controllers.Manag
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851) at
Controllers.Manager.createTheNetwork(Manager.java:123) at
Controllers.Main.main(Main.java:53)
为什么我要得到这个堆栈跟踪?我刚刚从另一个类初始化了一个ArrayList
主类
公共类主{
私有静态管理器;
私有静态数组列表;
私有静态数组列表;
私有静态数组列表和工具列表;
公共静态void main(字符串[]args){
ap傻瓜列表=新的ArrayList();
avjullist=newarraylist();
aNfooList=新阵列列表();
添加(新的Pfoo());
添加(新的Pfoo());
用于(Pfoo p:Ap傻瓜)
如果(!p.isAMethod())
添加(新的Cfoo());
添加(新的Nfoo());
添加(新的Nfoo());
经理=新经理();
manager.setList(aList1);
manager.setList(aList2);
manager.createSomething();
}
}
Manager.java
import java.util.ArrayList;
公共班级经理{
private ArrayList nfolist=新的ArrayList();
private ArrayList vfooList=new ArrayList();
公共节点管理器(){
}
公共阵列列表getnfolist(){
回归民主;
}
公共void addNfooToTheNfooNetwork(nfoon){
此.nfolist.add(n);
系统输出println(n);
}
公共void将新Vfoo添加到网络(Vfoo aVfoo){
getnfolist().get(0.addToStack(aVfoo);
}
公共无效添加一个新的网络(Tfoo t,int whichNfoo){
getNfooList().get(whichNfoo.addToStack(t);
}
公共无效重置网络工作(){
nfolist.clear();
}
公共空间{
for(Nfoo n:nfooList)
AddNfootthenfooNetwork(n);
for(Vfoo v:vfooList)
向网络(v)添加一个新窗口;
}
public void createSomething(ArrayList nl,ArrayList vl){
这是setnfolist(nl);
这个.setVfooList(vl);
for(Nfoo n:nfooList)
AddNfootthenfooNetwork(n);
for(Vfoo v:vfooList)
向网络(v)添加一个新窗口;
}
公共无效setnfolist(ArrayList nl){
this.nfolist=nl;
}
公共无效设置工具列表(ArrayList vl){
this.vfooList=vl;
}
}
事实上,正如您在使用迭代器的注释中所写的那样。检查文档中的循环:for(Obj o:objectList)
正如@Nagesh Susaria在评论中所说,您的实际错误是,当循环中的迭代器对其进行解析时,您试图重新初始化或只是将新的Nfoo对象
添加到ArrayList中。
检查以下各项:
for (Nfoo n : nfooList)
addNfooToTheNfooNetwork(n);
及
正如您将看到的,代码的“小故障”出现在this.nfolist.add(n)中代码>或addNfooToTheNfooNetwork(n)代码>。
我想他们两个都在做同样的事情。删除其中一个,您就可以了 事实上,正如您在使用迭代器的注释中所写的那样。检查文档中的循环:for(Obj o:objectList)
正如@Nagesh Susaria在评论中所说,您的实际错误是,当循环中的迭代器对其进行解析时,您试图重新初始化或只是将新的Nfoo对象
添加到ArrayList中。
检查以下各项:
for (Nfoo n : nfooList)
addNfooToTheNfooNetwork(n);
及
正如您将看到的,代码的“小故障”出现在this.nfolist.add(n)中代码>或addNfooToTheNfooNetwork(n)代码>。
我想他们两个都在做同样的事情。删除其中一个,您就可以了 您是否阅读了ConcurrentModificationException的javadoc?或者已经存在的无数类似问题中的任何一个?每个答案都提到了使用迭代器。我在这里不使用迭代器,也不使用迭代器添加或删除项目。我刚刚尝试将ArrayList从一个类设置为另一个类。代码类似于:setVfooList(newList),当我尝试使用它时,newList有ConcurentModificationException。如果我没有错,每个循环都是,比如for(Pfoo p:apwhoolist)
,请使用迭代器。for(Nfoo n:nfooList)AddNfootthenfooNetwork(n)代码>这似乎是在迭代时将nfooList中的每个元素添加回nfooList中,这就是问题所在。您是否阅读了ConcurrentModificationException的javadoc?或者已经存在的无数类似问题中的任何一个?每个答案都提到了使用迭代器。我在这里不使用迭代器,也不使用迭代器添加或删除项目。我刚刚尝试将ArrayList从一个类设置为另一个类。代码类似于:setVfooList(newList),当我尝试使用它时,newList有ConcurentModificationException。如果我没有错,每个循环都是,比如for(Pfoo p:apwhoolist)
,请使用迭代器。for(Nfoo n:nfooList)AddNfootthenfooNetwork(n)代码>这似乎是在迭代时将nfooList中的每个元素添加回nfooList,这就是问题所在
for (Nfoo n : nfooList)
addNfooToTheNfooNetwork(n);
public void addNfooToTheNfooNetwork(Nfoo n){
this.nfooList.add(n);
System.out.println(n);
}