【发布时间】:2012-12-31 15:23:09
【问题描述】:
我创建了一个小安卓游戏,但出现了奇怪的错误。
这里是日志:
12-31 16:10:22.407: E/AndroidRuntime(12824): FATAL EXCEPTION: Thread-1461
12-31 16:10:22.407: E/AndroidRuntime(12824): java.lang.IndexOutOfBoundsException: Invalid index 1, size is 0
12-31 16:10:22.407: E/AndroidRuntime(12824): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
12-31 16:10:22.407: E/AndroidRuntime(12824): at java.util.ArrayList.get(ArrayList.java:304)
12-31 16:10:22.407: E/AndroidRuntime(12824): at **.***.****.GameScreen.updatePaused(GameScreen.java:91)
12-31 16:10:22.407: E/AndroidRuntime(12824): at **.***.****.GameScreen.update(GameScreen.java:43)
12-31 16:10:22.407: E/AndroidRuntime(12824): at **.***.****.framework.impl.AndroidFastRenderView.run(AndroidFastRenderView.java:39)
12-31 16:10:22.407: E/AndroidRuntime(12824): at java.lang.Thread.run(Thread.java:856)
这是执行的部分代码:
int len = touchEvents.size();
for(int i = 0; i < len; i++) {
TouchEvent event = touchEvents.get(i); ->>> this line
.
.
.
怎么了?
【问题讨论】:
-
你的代码是多线程的吗?如果是这样,
touchEvents是否有可能在另一个线程中被修改? -
您是否在迭代
touchEvents时删除了元素? -
只测试'len'的值是否在记录器中返回一些值?
-
正如上面所说的 jeet 使用 Eclipse 调试器或类似的东西来遍历前面的每一行,看看它是如何变化的,很难从你发布的代码中分辨出来
-
它只是崩溃的事实有时听起来就像是由多线程引起的竞争条件。您绝对确定只有一个线程曾经触及该字段吗?
标签: java android indexing bounds out