什么ArrayIndexOutOfBoundsException意思,我该如何摆脱它?
以下是触发异常的代码示例:
String[] name = { "tom", "dick", "harry" };
for (int i = 0; i <= name.length; i++) {
System.out.println(name[i]);
}
Run Code Online (Sandbox Code Playgroud) 现在,我有一个包含一段代码的程序,如下所示:
while (arrayList.iterator().hasNext()) {
//value is equal to a String value
if( arrayList.iterator().next().equals(value)) {
// do something
}
}
Run Code Online (Sandbox Code Playgroud)
我是否正确,只要迭代ArrayList就可以了?
我得到的错误是:
java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.get(Unknown Source)
at main1.endElement(main1.java:244)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(Unknown Source)
at main1.traverse(main1.java:73)
at main1.traverse(main1.java:102)
at main1.traverse(main1.java:102)
at main1.main(main1.java:404)
Run Code Online (Sandbox Code Playgroud)
我会显示其余的代码,但它非常广泛,如果我没有正确地进行迭代,我会假设唯一的可能性是我没有ArrayList正确初始化.
我使用的是定制ListAdapter的ListView.我没有动态地改变任何东西(查看计数,视图类型,启用/禁用,我读了其他帖子,但他们从代码中改变了一些东西).我必须执行以下操作才能触发异常.向下滚动到列表底部,然后再向上滚动.在向上滚动动画的开头,我得到了这个例外.
04-14 09:41:43.907: ERROR/AndroidRuntime(400): FATAL EXCEPTION: main
04-14 09:41:43.907: ERROR/AndroidRuntime(400): java.lang.ArrayIndexOutOfBoundsException
04-14 09:41:43.907: ERROR/AndroidRuntime(400): at android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:4540)
04-14 09:41:43.907: ERROR/AndroidRuntime(400): at android.widget.AbsListView.trackMotionScroll(AbsListView.java:3370)
04-14 09:41:43.907: ERROR/AndroidRuntime(400): at android.widget.AbsListView.onTouchEvent(AbsListView.java:2233)
04-14 09:41:43.907: ERROR/AndroidRuntime(400): at android.widget.ListView.onTouchEvent(ListView.java:3446)
04-14 09:41:43.907: ERROR/AndroidRuntime(400): at android.view.View.dispatchTouchEvent(View.java:3885)
04-14 09:41:43.907: ERROR/AndroidRuntime(400): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:903)
04-14 09:41:43.907: ERROR/AndroidRuntime(400): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942)
04-14 09:41:43.907: ERROR/AndroidRuntime(400): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942)
04-14 09:41:43.907: ERROR/AndroidRuntime(400): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942)
04-14 09:41:43.907: ERROR/AndroidRuntime(400): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1691)
04-14 09:41:43.907: ERROR/AndroidRuntime(400): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1125)
04-14 09:41:43.907: ERROR/AndroidRuntime(400): at android.app.Activity.dispatchTouchEvent(Activity.java:2096)
04-14 09:41:43.907: ERROR/AndroidRuntime(400): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1675) …Run Code Online (Sandbox Code Playgroud) 在我们的日志文件中,我们发现以下内容
[2012-09-24 00:09:32.590 +0000UTC] ERROR host server1 [] [] somepackage.someclass [] [Unknown] [V3rAqPaDvvAAAAExEXhdWGyh] [pjsQwTGHzxcAAAE5j4YdGvWV] "ThreadName" Some error happened: java.lang.ArrayIndexOutOfBoundsException: null
Run Code Online (Sandbox Code Playgroud)
只有这一行,没有异常堆栈跟踪.
try发生此异常的块是执行使用javassist创建的动态生成的Java字节码.
我想知道两件事:
java.lang.ArrayIndexOutOfBoundsException日期nulllogger.error("message", theException)在catch块内部使用日志挂钩调用,这通常会导致在日志文件中打印完整的堆栈跟踪.我的问题:
什么样的代码可以导致日志输出"java.lang.ArrayIndexOutOfBoundsException:null".我尝试用没有运气的测试程序重现这个.我总是得到像"java.lang.ArrayIndexOutOfBoundsException:Index:3"或类似的东西.
丢失堆栈跟踪的原因可能是此代码是在运行时动态生成的,因此logger/JVM不会"知道"堆栈跟踪或相关的行号吗?
我们目前正在调试和调查以获取更多信息,但也许这听起来很熟悉.
我试图将一个对象添加到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();
}
}
Run Code Online (Sandbox Code Playgroud)
例外是
[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)
Run Code Online (Sandbox Code Playgroud)
但是根据ArrayList.add的签名,它不应该抛出这个异常.请帮忙.
我试图从ArrayList中删除一个对象,但我不断收到IndexOutOfBounds错误.现在有很多信息可用,为什么在删除时迭代 ArrayList 时会发生这种情况,但是我没有这样做.例:
ArrayList<Character> a = new ArrayList<Character>();
a.add('A');
a.add('B');
a.add('C');
System.out.println(a);
a.remove('A');
System.out.println(a);
Run Code Online (Sandbox Code Playgroud)
打印[A, B, C]然后失败:
java.lang.IndexOutOfBoundsException: Index: 65, Size: 3
at java.util.ArrayList.rangeCheck(ArrayList.java:635)
at java.util.ArrayList.remove(ArrayList.java:474)
at b.<init>(b.java:23)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at bluej.runtime.ExecServer$3.run(ExecServer.java:746)
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
编辑澄清这个问题不是一个重复这个问题:
这里发生的具体问题与迭代时删除元素时的常见问题无关.它更多是由重载的ArrayList remove方法和java 的自动类型转换char引起int的.
另一个问题的答案中没有涉及这方面.
我在Java中的String的split函数中遇到了一个意外的特性,这是我的代码:
final String line = "####";
final String[] lineData = line.split("#");
System.out.println("data: " + lineData[0] + " -- " + lineData[1]);
Run Code Online (Sandbox Code Playgroud)
这段代码给了我一个ArrayIndexOutOfBoundsException,而我希望它打印""和""(两个空字符串),或者可能是null和null(两个空字符串).
如果我改变我的代码
final String line = " # # # #";
final String[] lineData = line.split("#");
System.out.println("data: " + lineData[0] + " -- " + lineData[1]);
Run Code Online (Sandbox Code Playgroud)
然后它打印""和""(预期的行为).
如何让我的第一个代码不抛出异常,并给我一个空字符串数组?
谢谢
我正在尝试用Java在HTML中用一些标记来包围一个单词.调用replaceAll时,此代码抛出ArrayIndexOutOfBoundsException.
Pattern pattern = Pattern.compile(wordToHighlight + "\\w{0,5}");
String replacement = "<span class='highlight'>$1</span>";
Matcher matcher = pattern.matcher(html);
if (matcher != null)
if (matcher.find())
retVal = matcher.replaceAll(replacement);
Run Code Online (Sandbox Code Playgroud) 低于异常的ArrayList.clear()
任何原因都会明确抛出此类异常。我知道 add 或 get 可能会因负索引或大于列表大小而抛出此错误。
Fatal Exception: java.lang.ArrayIndexOutOfBoundsException: length=49; index=49
at java.util.ArrayList.clear(ArrayList.java:569)
Run Code Online (Sandbox Code Playgroud) 我正在使用 Hibernate 并得到异常 ArrayIndexOutOfBoundsException。可能的原因是什么?