Java ArrayList size()方法使程序崩溃

Java ArrayList size()方法使程序崩溃,java,arraylist,window,Java,Arraylist,Window,我目前正在开发一款使用LWJGL 3.0.0b的游戏,出现了一个奇怪的情况 背景: 我有一个自定义实体类和一个实体管理器来存储我的实体。当一个实体被更新时,会调用一个名为“tickTrail”的方法,该方法会添加一个trail实体,以使图形在视觉上更好、更有趣 我已经将其简化为entities.size()函数,是的,我自己尝试解决这个问题:p 我目前的一个解决方案是替换所有类似的方法: for (int i = 0; i < entities.size(); i++) { //cal

我目前正在开发一款使用LWJGL 3.0.0b的游戏,出现了一个奇怪的情况

背景:

我有一个自定义实体类和一个实体管理器来存储我的实体。当一个实体被更新时,会调用一个名为“
tickTrail
”的方法,该方法会添加一个trail实体,以使图形在视觉上更好、更有趣

我已经将其简化为
entities.size()
函数,是的,我自己尝试解决这个问题:p

我目前的一个解决方案是替换所有类似的方法:

for (int i = 0; i < entities.size(); i++)
{
  //calls a method for drawing, updating, or input
}
for(int i=0;i
将每个
实体.size()替换为
size
<代码>大小
是在添加、删除、清除列表或仅删除实体时更改的变量

此方法100%有效,窗口拖动不会使使用此方法的程序崩溃

问题

总之,最后一个问题是为什么会发生这种情况?我还没有确定为什么拖动窗口并使用ArrayList的size()方法会使程序崩溃,但将变量存储在它的位置是完全正确的

非常感谢对这种奇怪现象的任何帮助或解释:)

编辑 上一次编辑被证明是错误的,即使使用了大小变量,程序仍然会崩溃,是时候回到绘图板上了

编辑两个
好的,有时候窗口拖动可以工作,有时候不行,这可能不仅仅是一个简单的size()方法调用://

根据您提供的内容,我猜多个线程正在并发访问ArrayList,而线程正在践踏所有其他线程

如果您不是通过Collections.synchronizedList()创建列表,则可以确保列表上的所有操作都是原子的,这样数组的内部就不会损坏

我走这条路的原因是,拖动窗口可能会生成多个事件来更新数组,而您正试图同时遍历它


当您使用变量来观察大小时,并发性问题就会消失。当然,除非您使用AtomicInteger或其他什么,否则变量中可能没有正确的值,但至少不会抛出异常。

根据您提供的少量信息,我猜多个线程正在并发访问ArrayList,而线程正在其他所有线程上跺脚

如果您不是通过Collections.synchronizedList()创建列表,则可以确保列表上的所有操作都是原子的,这样数组的内部就不会损坏

我走这条路的原因是,拖动窗口可能会生成多个事件来更新数组,而您正试图同时遍历它


当您使用变量来观察大小时,并发性问题就会消失。当然,除非使用AtomicInteger或其他什么,否则变量中可能没有正确的值,但至少不会抛出异常。

崩溃是指程序只是崩溃,而不是什么异常都没有。我使用的是EclipseIDE,所以可能就是这样。我不确定我们如何帮助提供到目前为止的信息。你没有空的捕手挡块,是吗?您已经通过Eclipse调试器运行了吗?我打赌你现在最好的办法是分而治之,测试代码中独立的部分,并深入研究,直到找出导致错误的原因。我的钱花在NullPointerException上……崩溃是指程序只是崩溃,而不是什么异常。我使用的是EclipseIDE,所以可能就是这样。我不确定我们如何帮助提供到目前为止的信息。你没有空的捕手挡块,是吗?您已经通过Eclipse调试器运行了吗?我敢打赌,你现在最好的办法是分而治之,测试代码中独立的部分,并深入研究,直到找出导致错误的原因。我的钱在一个NullPointerException上……即使存在并发损坏,
size()
方法本身也不会崩溃。无效索引的后续访问可能会失败(异常消息会告诉我们更多)。即使存在并发损坏,
size()
方法本身也不会崩溃。无效索引的后续访问可能会发生(异常消息会告诉我们更多信息)。