Java ConcurrentModificationException的可能原因
我知道什么是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);
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);