我正在尝试向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的签名,它不应该抛出这个异常。请帮帮忙。
发布于 2012-03-09 18:25:25
如果使用得当,ArrayList.add()
永远不会抛出ArrayIndexOutOfBoundsException
,所以看起来你正在以它不支持的方式使用你的ArrayList
。
从您发布的代码很难判断,但我猜测您正在从多个线程访问您的ArrayList
。
ArrayList
没有同步,因此不是线程安全的。如果这就是问题所在,你可以通过使用Collections.synchronizedList()
包装你的List
来解决它。
将您的代码更改为以下代码应该可以解决此问题:
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();
}
}
https://stackoverflow.com/questions/9632387
复制相似问题