I am trying to add a object to a ArrayList and its throwing ArrayIndexOutOfBoundsException Following is the code
private void populateInboxResultHolder(List inboxErrors){
inboxList = new ArrayList();
try{
inboxHolder = new InboxResultHolder();
//Lots of Code
inboxList.add(inboxHolder);
}catch(Exception e){
e.printStackTrace();
}
}
And the exception is
[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)
But according to the signature of ArrayList.add it should not throw this exception. Please help.
ArrayList.add()
should never throw an ArrayIndexOutOfBoundsException
if used "properly" so it seems that you're using your ArrayList
in a way which it does not support.
It's hard to tell from just the code you've posted but my guess is that you're accessing your ArrayList
from multiple threads.
ArrayList
isn't synchronised and so isn't thread safe. If this is the problem you can fix it by wrapping your List
using Collections.synchronizedList()
.
Changing your code to the following should resolve the problem:
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();
}
}