Android - ArrayIndexOutOfBoundsException错误

问题描述:

我看着其他职位与此问题,但他们似乎有某种连接到editText字段或关闭一个错误。就我而言,其他帖子的解决方案似乎没有任何帮助。这里是我的代码:Android - ArrayIndexOutOfBoundsException错误

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 

我该如何解决这个问题?

+0

你确定它在这里发生?有没有线程正在修改'arr'? – njzk2

你有2个不同的Thread s的同时调用push

当第一个完成的push执行,它取代arrtemp_arr,这是通过较长1

当第二到达temp_arr[arr.length][0],存在的索引差错由于arr大小是不一样的当temp_arr被初始化。

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

,或者你可以添加一个​​块:

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

有一些线程正在发生。

解决方法:你必须确保一些动作一定要同步

public synchronized 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; 
} 

也许你有另外一个新功能“弹出”数据来自“ARR”。如果您有此功能,请添加“同步”。

public synchronized int pop(int w, int h) { 
    // 
} 

或者另一种方式:

public void push(int w, int h) { 
    synchronized(arr) { 
     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; 
    } 
} 

并请确保 “弹出” 功能,必须同步ARR” 也。

+0

http://www.tutorialspoint.com/java/java_thread_synchronization.htm这里是关于“synchronized”的例子 – Luc