我创建了一个小 Android 游戏,但遇到了奇怪的错误。
这是日志:
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
.
.
.
出了什么问题?
最佳答案
如果您遇到线程问题,您必须在像这样循环之前在集合上同步
synchronize(touchEvents) {
for(TouchEvent event : touchEvents) {
//do whatever you want with events
}
}
或者,如果在处理副本时事件已被删除,那么处理集合中的事件仍然有效,您可以制作该集合的本地副本并对其进行循环。
关于Java 索引越界异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14103310/