Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.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 ConcurrentModificationException在不应该抛出时抛出_Java - Fatal编程技术网

Java ConcurrentModificationException在不应该抛出时抛出

Java ConcurrentModificationException在不应该抛出时抛出,java,Java,你知道为什么吗 lines = newRemainingLines.size(); 会抛出此异常吗 lines 是一个用来存储ArrayList大小的int newRemainingLines(); 我意识到这可能不足以给出一个明确的答案,但也许解释一下应该寻找什么会有所帮助。老实说,我不知道这段代码是如何同时修改这个int的 int i = 0; POLines.clear(); itemLines.clear(); lines = newLines.size()

你知道为什么吗

lines = newRemainingLines.size();
会抛出此异常吗

lines
是一个用来存储ArrayList大小的int

newRemainingLines();
我意识到这可能不足以给出一个明确的答案,但也许解释一下应该寻找什么会有所帮助。老实说,我不知道这段代码是如何同时修改这个int的

int i = 0;
    POLines.clear();
    itemLines.clear();
    lines = newLines.size();
    //POLines should contain only lines not relating to items
    while(!newLines.get(i).equals(ITEMSTART) && i < lines){
        POLines.add(newLines.get(i));
        i++;
    }
    List<String> newRemainingLines = newLines.subList(i + 1, lines);
    newLines.clear();
    i = 0;
    lines = newRemainingLines.size();
    //itemLines should contain lines only relating to items
    while(!newRemainingLines.get(i).equals(POEND) && i < lines){

        itemLines.add(newRemainingLines.get(i));
        i++;
    }
    List<String> finalRemainingLines = newRemainingLines.subList(i + 1, lines);
    i = 0;
    lines = finalRemainingLines.size();
    while(i < lines){

        newLines.add(finalRemainingLines.get(i));
        i++;
    }
    tempOrder = POF.createPurchaseOrder(POLines,itemLines);
    _orders.add(tempOrder);
inti=0;
POLines.clear();
itemLines.clear();
lines=换行符。size();
//POLINE应仅包含与项目无关的行
而(!newLines.get(i).equals(ITEMSTART)&&i

这将出现在具有类似代码段的for循环中的if-else语句中。这是最后一个,但只有这个抛出异常。

子列表
返回基础列表的视图。它不是复制品

引述:

返回的列表由该列表支持,因此返回列表中的非结构性更改将反映在此列表中,反之亦然

如果支持列表(即,此列表)以任何方式(而不是通过返回的列表)进行结构修改,则此方法返回的列表的语义将变得未定义

语句
newLines.clear()
在结构上修改了支持列表,因此随后调用
newRemainingLines.size()
时表示不行,又名
ConcurrentModificationException

要创建副本,请使用:

List<String> finalRemainingLines = new ArrayList<>(newRemainingLines.subList(i + 1, lines));
List finalRemainingLines=newarraylist(newRemainingLines.subList(i+1,行));

请发布完整的代码,并从引发异常的位置发布正确的行
size()
方法调用永远不会引发该异常。我可以向您保证,此行正在引发该异常。什么类型的
newRemainingLines
?提示:它不是
ArrayList
@Andreas Right,对不起,它只是一个列表。有什么我看不到的吗?@CreasyBear,如果你只是把堆栈跟踪。。。它将清楚地显示导致异常的方法调用…好的,非常感谢。我不知道子列表只返回了一个视图。即使您没有阅读全部内容,前三个词也是:“返回视图”。不能错过!