Java 索引越界异常

标签 java android indexing bounds out

我创建了一个小 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/

相关文章:

java - java听按键的正确方法

java - 使用标记列表构建抽象语法树

java - 在循环中使用线程时出现异常

Android - 对话框 - 如果用户输入错误密码,则使对话框保持打开状态

android - 新的 gms.maps.MapView 在 ListView 中呈现有点滞后?

mysql 查询在数据库上消耗很长时间,但在其他数据库上运行良好

Mysql不在大表上使用索引

Java - JDBC 替代方案

java - 在 Canvas 上仅显示图像的特定部分

python - pandas 中 df.reindex() 和 df.set_index() 方法的区别