Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有时接收java.util.ConcurrentModificationException,有时不接收。Can';我不明白为什么 因此,首先是错误消息:_Java_Crash_Render - Fatal编程技术网

有时接收java.util.ConcurrentModificationException,有时不接收。Can';我不明白为什么 因此,首先是错误消息:

有时接收java.util.ConcurrentModificationException,有时不接收。Can';我不明白为什么 因此,首先是错误消息:,java,crash,render,Java,Crash,Render,线程“thread-2”中的异常 java.util.ConcurrentModificationException 在java.util.ArrayList$Itr.checkForComodification(未知源) 在java.util.ArrayList$Itr.next(未知源代码) 在zom.mainpac.Game.render(Game.java:218) 在zom.mainpac.Game.run(Game.java:154) 在java.lang.Thread.run(未知

线程“thread-2”中的异常
java.util.ConcurrentModificationException
在java.util.ArrayList$Itr.checkForComodification(未知源)
在java.util.ArrayList$Itr.next(未知源代码)
在zom.mainpac.Game.render(Game.java:218)
在zom.mainpac.Game.run(Game.java:154)
在java.lang.Thread.run(未知源)

在第218行渲染对象的阵列列表:

    for(Objects e : list){
    e.render(g);
    }
然后是第154行的渲染函数:

    render();


问题可能是因为我的笔记本电脑有时无法渲染所有对象,所以放弃了。因此,我只是想知道是否有更好的方法可以做到这一点,而不会一直崩溃。

您有线程安全问题和/或列表访问问题。您可能希望将列表/数组项复制到本地变量中,因此在遍历和/或考虑同步块时不能修改列表。


一个线程正在访问您的实例列表变量(执行for循环),然后另一个线程出现,可能它想要访问它。要解决而不是使用实例变量执行for循环,请创建一个局部变量并从.list中复制项。现在您有了一个其他线程无法访问的私有列表

您有了线程安全问题和/或列表访问问题。您可能希望将列表/数组项复制到本地变量中,因此在遍历和/或考虑同步块时不能修改列表。


一个线程正在访问您的实例列表变量(执行for循环),然后另一个线程出现,可能它想要访问它。要解决而不是使用实例变量执行for循环,请创建一个局部变量并从.list中复制项。现在您有了一个其他线程无法访问的私有列表

您有了线程安全问题和/或列表访问问题。您可能希望将列表/数组项复制到本地变量中,因此在遍历和/或考虑同步块时不能修改列表。


一个线程正在访问您的实例列表变量(执行for循环),然后另一个线程出现,可能它想要访问它。要解决而不是使用实例变量执行for循环,请创建一个局部变量并从.list中复制项。现在您有了一个其他线程无法访问的私有列表

您有了线程安全问题和/或列表访问问题。您可能希望将列表/数组项复制到本地变量中,因此在遍历和/或考虑同步块时不能修改列表。


一个线程正在访问您的实例列表变量(执行for循环),然后另一个线程出现,可能它想要访问它。要解决而不是使用实例变量执行for循环,请创建一个局部变量并从.list中复制项。现在您有了一个私有列表,其他线程无法访问该列表。For each使用迭代器执行循环,因此,如果您碰巧从该列表中删除了某些内容,则在迭代过程中很容易出现此类异常。例如,如果在渲染时从游戏中的列表中删除平铺或精灵,可能会发生这种情况。如果您不经常修改列表,那么如果您希望在迭代时修改列表,您可以使用CopyOnWriteArrayList(我们不必创建列表的副本),但需要注意的是,您应该首先了解导致此情况的行为,而不是使用盲修复。

For each使用迭代器进行循环,所以,若您碰巧从列表中删除了一些内容,那个么在迭代过程中很容易出现这种异常。例如,如果在渲染时从游戏中的列表中删除平铺或精灵,可能会发生这种情况。如果您不经常修改列表,那么如果您希望在迭代时修改列表,您可以使用CopyOnWriteArrayList(我们不必创建列表的副本),但需要注意的是,您应该首先了解导致此情况的行为,而不是使用盲修复。

For each使用迭代器进行循环,所以,若您碰巧从列表中删除了一些内容,那个么在迭代过程中很容易出现这种异常。例如,如果在渲染时从游戏中的列表中删除平铺或精灵,可能会发生这种情况。如果您不经常修改列表,那么如果您希望在迭代时修改列表,您可以使用CopyOnWriteArrayList(我们不必创建列表的副本),但需要注意的是,您应该首先了解导致此情况的行为,而不是使用盲修复。

For each使用迭代器进行循环,所以,若您碰巧从列表中删除了一些内容,那个么在迭代过程中很容易出现这种异常。例如,如果在渲染时从游戏中的列表中删除平铺或精灵,可能会发生这种情况。如果您不经常修改列表,如果您希望在迭代时修改列表,则可以使用CopyOnWriteArrayList(让我们不必创建列表的副本),但需要注意的是,您应该首先了解导致此问题的行为,而不是使用盲修复。

出现问题的原因是您的代码在迭代时修改了列表

  • 如果只有一个线程从列表中读/写,那么调用

    这一战略(2)

有时会将一些元素添加到同一数组列表中。如果要使用列表的副本进行迭代,则可以修复该异常:

for (Objects e : new ArrayList(list)) {
   e.render(g);
}
  • 如果有多个线程来读/写列表,请改用java.util.concurrent.CopyOnWriteArrayList

出现问题是因为代码在迭代时修改了列表

  • for (Objects e : new ArrayList(list)) {
       e.render(g);
    }