有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android ArrayIndexOutOfBoundsException错误

我查看了其他有这个问题的帖子,但它们似乎与editText字段或off by one错误有某种联系。就我而言,其他帖子的解决方案似乎都没有帮助。这是我的代码:

public void push(int w, int h) {
    int[][] temp_arr = new int[arr.length+1][2];
    for (int i=0; i<arr.length; i++) {
        temp_arr[i][0] = arr[i][0];
        temp_arr[i][1] = arr[i][1];
    }
    temp_arr[arr.length][0] = w; // happens here
    temp_arr[arr.length][1] = h;
    arr = temp_arr;
}

以下是错误消息:

Process: <package name>, PID: 16749
java.lang.ArrayIndexOutOfBoundsException: length=76; index=76

我该怎么解决这个问题


共 (1) 个答案

  1. # 1 楼答案

    您有两个不同的Thread同时调用push

    当第一个完成push的执行时,它将arr替换为temp_arr,后者的长度为1

    当第二个到达temp_arr[arr.length][0]时,会出现索引错误,因为arr的大小与temp_arr初始化时的大小不同

    为了防止这种情况,可以使用ExecutorService在同一个Thread上连续运行多个Runnable,顺序为:http://developer.android.com/reference/java/util/concurrent/Executors.html#newSingleThreadExecutor%28%29

    或者可以添加synchronized块:

    public synchronized void push(int w, int h) {
        // ...
    }