为什么这段代码会在Java中引发ConcurrentModificationException异常?
当我点击包含的GUI元素时,我希望代码创建另一个GUI元素并将其添加到列表elements中。但实际上,当我点击它时,会抛出ConcurrentModificationException异常。
我知道当在向列表添加元素时修改列表时会抛出ConcurrentModificationException异常,但是mouseEntered方法直到elements被修改后才被调用。
那么这个错误是怎么发生的呢?
错误文本:
public class MainMenuState {
protected void init() {
this.addElements(
new GUIElement()
.addMousePressed((e, element) -> {
this.elements.add(new GUIElement()
.addMouseEntered((e, element) -> //...)
}
)
);
}
addElements
的定义如下:
void addElements(GameElement... elements){
this.elements.addAll(Arrays.asList(elements));
}
当我点击包含的GUI元素时,我希望代码创建另一个GUI元素并将其添加到列表elements中。但实际上,当我点击它时,会抛出ConcurrentModificationException异常。
我知道当在向列表添加元素时修改列表时会抛出ConcurrentModificationException异常,但是mouseEntered方法直到elements被修改后才被调用。
那么这个错误是怎么发生的呢?
错误文本:
Exception in thread "Thread-2" java.util.ConcurrentModificationException
at java.util.LinkedList$ListItr.checkForComodification(Unknown Source)
at java.util.LinkedList$ListItr.next(Unknown Source)
at java.lang.Iterable.forEach(Unknown Source)
at code.state.GameState.render(GameState.java:34)
at code.state.Handler.render(Handler.java:32)
at code.state.Handler.render(Handler.java:28)
at code.frame.GameEngine.render(GameEngine.java:94)
at code.frame.GameEngine.run(GameEngine.java:68)
at java.lang.Thread.run(Unknown Source)