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
我该如何解决这个问题?
你有2个不同的Thread
s的同时调用push
。
当第一个完成的push
执行,它取代arr
与temp_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” 也。
http://www.tutorialspoint.com/java/java_thread_synchronization.htm这里是关于“synchronized”的例子 – Luc
你确定它在这里发生?有没有线程正在修改'arr'? – njzk2