gpt4 book ai didi

java - 为什么此代码会导致 Java 中的 ConcurrentModificationException?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:54:08 24 4
gpt4 key购买 nike

为什么这段代码会导致 Java 中的 ConcurrentModificationException?

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));
}

当我单击封闭的 GUIElement 时,我希望代码创建另一个 GUIElement 并将其添加到列表 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)

最佳答案

我认为这里没有足够的上下文来准确查明您的问题的原因。但一种解决方案是简单地使用:

 List<Object> objList = Collections.synchronizedList(new ArrayList<Object>());

实例化有问题的列表以简单地同步访问它。

关于java - 为什么此代码会导致 Java 中的 ConcurrentModificationException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35122206/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com