2015-01-12 1 views
0

이 문제로 다른 게시물을 보았지만 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

답변

1

Thread은 (는) 동시에 push으로 전화를 겁니다. arr의 크기가 동일하지 않기 때문에

제 한 push의 실행이 완료되면 1

번째 temp_arr[arr.length][0] 도달하여 더 이상 temp_arrarr 대체 인덱스 오류가 때 temp_arr 초기화되었습니다. http://developer.android.com/reference/java/util/concurrent/Executors.html#newSingleThreadExecutor%28%29

또는 당신은 synchronized 블록을 추가 할 수 있습니다 :

이를 방지하기 위해, 당신은 직렬로, 같은 Thread에 여러 Runnable의를 실행하는 ExecutorService을 사용할 수 있습니다

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

일부 스레드가를 계속하고있어.

솔루션 : 당신은 어떤 행동이 동기화

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

를해야합니다 수 있도록해야 어쩌면 당신은 "" "편곡"데이터 다른 기능을 가지고있다. 이 기능이있는 경우 "동기화"을 추가하십시오.

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

그리고 "팝업"기능, 당신은 또한 "편곡"를 동기화해야합니다 있는지 확인하십시오.

+0

http://www.tutorialspoint.com/java/java_thread_synchronization.htm 여기 "동기화 된" – Luc

관련 문제