Java ConcurrentModificationException的可能原因

Java ConcurrentModificationException的可能原因,java,concurrentmodification,Java,Concurrentmodification,我知道什么是ConcurrentModificationException。我以前有过它们,我以前解决过它们,我可以用迭代器解决它们。 然而,在这种情况下,我不明白为什么会抛出它 public boolean pointOnEdgeBlob(int x, int y, float edgeHitEpsilon) { init(); for (int i = 0; i < nOfBlobs; i++) { Blob b = blobs.get(i);

我知道什么是ConcurrentModificationException。我以前有过它们,我以前解决过它们,我可以用迭代器解决它们。 然而,在这种情况下,我不明白为什么会抛出它

public boolean pointOnEdgeBlob(int x, int y, float edgeHitEpsilon) {

    init();

    for (int i = 0; i < nOfBlobs; i++) {
        Blob b = blobs.get(i);
         // >>>>>>>>>>>>>>>>>>>>> here it calls the method where it goes wrong
        if (b.edgeHit(x, y, edgeHitEpsilon)) return true; 
    }
    return false;
}
没有其他威胁在运行

以下是堆栈跟踪:

线程“动画线程”中出现异常 位于的java.util.ConcurrentModificationException checkForComodification(AbstractList.java:752)位于 size(AbstractList.java:625)位于 位于的nl.doekewartena.contour.scanner.Blob.edgeHit(Blob.java:229) doekewartena.contour.scanner.BlobData.pointOnEdgeBlob(BlobData.java:333) 在 doekewartena.contour.scanner.ContourFinder.scan(ContourFinder.java:555) 在 doekewartena.contour.scanner.ContourFinder.scan(ContourFinder.java:469) 在exclude.T04_ContourFinder.draw(T04_ContourFinder.java:38)处 processing.core.PApplet.handleDraw(PApplet.java:2386)位于 processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:240) 运行(PApplet.java:2256) run(Thread.java:695)

一旦你做到了

x = list.subList(fromIndex, toIndex);
不应修改列表,否则在访问x时将抛出CME

从.subList javadocs中:

如果 支持列表(即此列表)在结构上以任何方式进行修改 而不是通过返回的列表。(结构修改是指 改变这个列表的大小,或者以这种方式扰乱它 进行中的迭代可能产生错误结果的方式。)


那么什么是
cornerVectors
?其他线程中没有活动?我很确定有些事情您没有告诉我们。向我们显示异常堆栈跟踪。重点是您不应该在调用
list.subList()
后对其进行修改。
 List<PVector> cornerVectors;
list.subList(fromIndex, toIndex);
x = list.subList(fromIndex, toIndex);