首先是错误消息:
线程“Thread-2”中出现异常
java.util.ConcurrentModificationException
在 java.util.ArrayList$Itr.checkForCommodification(来源未知)
在 java.util.ArrayList$Itr.next(来源未知)
在 zom.mainpac.Game.render(Game.java:218)
在zom.mainpac.Game.run(Game.java:154)
在 java.lang.Thread.run(来源未知)
在第 218 行渲染我的对象 ArrayList:
for(Objects e : list){
e.render(g);
}
然后是第 154 行的渲染函数:
render();
...
private void render() {
BufferStrategy bufferStrategy = this.getBufferStrategy();
if (bufferStrategy == null) {
this.createBufferStrategy(2);
return;
}
问题可能是因为我的笔记本电脑有时无法渲染所有对象,因此它放弃了。所以我只是想知道是否有更好的方法可以做到这一点而不会一直崩溃。
最佳答案
您遇到线程安全问题和/或列表访问问题。您可能希望将列表/数组项复制到局部变量中,以便在遍历和/或考虑同步块(synchronized block)时无法修改列表。
您的实例列表变量正在被一个线程访问(执行 for 循环),然后另一个线程出现,也许它想要访问它。要解决问题,而不是使用实例变量执行 for 循环,请创建一个局部变量并从 .list 复制项目。现在您有一个其他线程无法访问的私有(private)列表
关于java - 有时会收到 java.util.ConcurrentModificationException,有时则不会。不明白为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22178464/