Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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.util.ConcurrentModificationException_Java_Arrays_Iterator_Hashset - Fatal编程技术网

“线程中的异常”;“主要”;java.util.ConcurrentModificationException

“线程中的异常”;“主要”;java.util.ConcurrentModificationException,java,arrays,iterator,hashset,Java,Arrays,Iterator,Hashset,当我运行下面的代码时,我得到一个异常。我搜索了一下,但找不到任何解决办法 Exception in thread "main" java.util.ConcurrentModificationException at java.util.HashMap$HashIterator.nextEntry(Unknown Source) at java.util.HashMap$KeyIterator.next(Unknown Source) at com.aybits.s

当我运行下面的代码时,我得到一个异常。我搜索了一下,但找不到任何解决办法

Exception in thread "main" java.util.ConcurrentModificationException
     at java.util.HashMap$HashIterator.nextEntry(Unknown Source)
     at java.util.HashMap$KeyIterator.next(Unknown Source)
     at com.aybits.software.linkgrabber.Grabber.main(Grabber.java:45)
行号45用于(字符串linkFromCollection:linksList){

公共类抓取器{
静态字符串url;
文件文件;
static Set linksList=new HashSet();
字符串匹配String=“java2s.com/Code”;
静态布尔值isCrawling=true;
静态int STOP_WATCH=0;
公共抓取器(字符串url){
Grabber.url=url;
}
公共void抓取链接(字符串urlToCrawl)引发IOException{
doc=Jsoup.connect(urlToCrawl).timeout(20*1000.get();
Elements links=doc.select(“a[href]”);
用于(元素链接:链接){
//打印(“*a:(%s)”,link.attr(“abs:href”),修剪(link.text(),35));
if(link.attr(“abs:href”).toString()包含(matchingString)){
如果(!linksList.contains(link.attr(“abs:href”).toString()){
System.out.println(“添加-”+link.attr(“abs:href”);
linksList.add(link.attr(“abs:href”).toString());
}
}
}
}
公共静态void main(字符串[]args)引发IOException{
抓取器应用=新抓取器(“http://java2s.com");
应用程序链接(url);
while(正在绘制){
用于(字符串linkFromCollection:linksList){
app.grabLinks(linkFromCollection);
if(linksList.contains(linkFromCollection)){
秒表+=5;
System.out.println(“秒表是”+秒表);
}否则{
秒表-=1;
System.out.println(“秒表是”+秒表);
}
如果(停止观察>=100){
isCrawling=假;
System.out.println(“秒表是”+秒表);
}
}
}
ICVSWrite writer=新的ICVSWrite();
String[]strArray=(String[])linksList.toArray();
作家,作家(strArray);
}
}

集合
上循环时,不能调用
添加
。此处:

for (Element link : links) {        
    if(...){
        if(...){
            ...
            linksList.add(link.attr("abs:href").toString());
                      ^^^ <- here
        }
    }
}
您必须将您的项目添加到另一个
集合中
,然后将它们复制过来

让我困惑了一段时间的是,为什么异常来自于
HashMap
,因为我假设
linksList
是一个
列表
——显然它是一个
集合
。不是世界上最好的名字

.

线路

linksList.add(link.attr("abs:href").toString());
在迭代时修改
linksList
集合。下次通过
main
中的
for
循环,Java调用集合上的
next
,查看集合已被修改,并抛出异常

执行增强的
for
循环时,不能向集合中添加或从集合中删除

for(String linkFromCollection : linksList) {
   app.grabLinks(linkFromCollection);       
linksList.add(link.attr("abs:href").toString());