Java IndexOutOfBoundsException

car*_*rvo 0 java indexing android out bounds

我创建了一个小安卓游戏,但我得到了奇怪的错误.

这是日志:

    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)
Run Code Online (Sandbox Code Playgroud)

以下是执行代码的一部分:

    int len = touchEvents.size();
    for(int i = 0; i < len; i++) {
        TouchEvent event = touchEvents.get(i); ->>> this line
    .
    .
    .
Run Code Online (Sandbox Code Playgroud)

怎么了 ?

Bra*_*rad 5

如果您遇到线程问题,则必须在循环之前同步集合,如下所示

synchronize(touchEvents) {
    for(TouchEvent event : touchEvents) {
        //do whatever you want with events
    }
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以制作集合的本地副本并循环使用该集合,如果在您处理副本时删除了集合中的事件,则它仍然有效.