22

オブジェクトを ArrayList に追加しようとしていますが、ArrayIndexOutOfBoundsException をスローしています。以下はコードです。

private void populateInboxResultHolder(List inboxErrors){
    inboxList = new ArrayList();
    try{                
        inboxHolder = new InboxResultHolder();
        //Lots of Code
        inboxList.add(inboxHolder);
    }catch(Exception e){
        e.printStackTrace();
    }
}

そして例外は

[3/7/12 15:41:26:715 UTC] 00000045 SystemErr     R java.lang.ArrayIndexOutOfBoundsException
[3/7/12 15:41:26:721 UTC] 00000045 SystemErr     R      at java.util.ArrayList.add(ArrayList.java:378)
[3/7/12 15:41:26:721 UTC] 00000045 SystemErr     R      at com.ml.fusion.ui.common.web.bean.inbox.InboxSearchBean.populateInboxResultHolder(InboxSearchBean.java:388)    
[3/7/12 15:41:26:721 UTC] 00000045 SystemErr     R      at com.ml.fusion.ui.common.web.bean.inbox.InboxSearchBean.searchInboxErrors(InboxSearchBean.java:197)
[3/7/12 15:41:26:721 UTC] 00000045 SystemErr     R      at com.ml.fusion.ui.common.web.bean.inbox.InboxSearchBean.viewInbox(InboxSearchBean.java:207)

しかし、ArrayList.add の署名によると、この例外はスローされません。助けてください。

4

2 に答える 2

40

ArrayList.add()ArrayIndexOutOfBoundsException「適切に」使用された場合は決してスローしないでくださいArrayList。サポートされていない方法で使用しているようです。

ArrayList投稿したコードだけではわかりにくいですが、複数のスレッドからアクセスしていると思います。

ArrayList同期されていないため、スレッドセーフではありません。これが問題である場合は、Listを使用してラップすることで修正できますCollections.synchronizedList()

コードを次のように変更すると、問題が解決するはずです。

private void populateInboxResultHolder(List inboxErrors){
    List inboxList = Collections.synchronizedList(new ArrayList());
    try{                
        inboxHolder = new InboxResultHolder();
        //Lots of Code
        inboxList.add(inboxHolder);
    }catch(Exception e){
        e.printStackTrace();
    }
}
于 2012-03-09T10:25:24.690 に答える
-3

投稿したコードはArrayIndexOutOfBoundsExceptionをスローしません

取得した例外は、省略した部分でスローされます。スタックトレースを見てください。例外の原因となるそのInboxSearchBean。ほとんどの場合、無効なインデックスを使用してリストに対してget(index)を実行します。

于 2012-03-09T11:46:58.703 に答える