索引越界错误

时间:2010-03-28 20:26:15

标签: java exception gwt arraylist

我正在开发一个程序,我将重新创建保存的小部件重新连接到边界面板。当我创建它们时,我也试图将值放入ArrayList中,这样如果我想更新并保存打开的项目,我应该可以通过从ArrayList获取值来实现。

以下是代码的外观:

for(int i = 0; i < result.length; i++){
                if(ename.contains(result[i].getParticipateEntityName())){
                        ername.add(ename.indexOf(result[i].getParticipateEntityName()), result[i].getParticipateRelatioshipName());
                        etotalpartial.add(ename.indexOf(result[i].getParticipateEntityName()), result[i].getTotalPartial());
                }else if(wename.contains(result[i].getParticipateEntityName())){
                        wrname.add(wename.indexOf(result[i].getParticipateEntityName()), result[i].getParticipateRelatioshipName());
                }
}

这里的ename,ername,etotalpartial,wename和wrname都是ArrayList。这段代码包含在异步类方法中。

当我运行代码时,我在“ername.add(ename ......”。<。p>中得到错误

这是错误堆栈:

java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
    at java.util.ArrayList.add(ArrayList.java:367)
    at com.e.r.d.client.ERD1$16.onSuccess(ERD1.java:898)
    at com.e.r.d.client.ERD1$16.onSuccess(ERD1.java:1)
    at com.google.gwt.user.client.rpc.impl.RequestCallbackAdapter.onResponseReceived(RequestCallbackAdapter.java:216)
    at com.google.gwt.http.client.Request.fireOnResponseReceived(Request.java:287)
    at com.google.gwt.http.client.RequestBuilder$1.onReadyStateChange(RequestBuilder.java:393)
    at sun.reflect.GeneratedMethodAccessor16.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:157)
    at com.google.gwt.dev.shell.BrowserChannel.reactToMessagesWhileWaitingForReturn(BrowserChannel.java:1713)
    at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:165)
    at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:120)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:507)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:264)
    at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)
    at com.google.gwt.core.client.impl.Impl.apply(Impl.java)
    at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:188)
    at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:157)
    at com.google.gwt.dev.shell.BrowserChannel.reactToMessages(BrowserChannel.java:1668)
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:401)
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:222)
    at java.lang.Thread.run(Thread.java:619)

我不确定我做错了什么。

任何输入都会有很大的帮助。

谢谢。

2 个答案:

答案 0 :(得分:2)

如果您无法保证列表的大小大于List,则无法使用index ername方法。

这就是您的代码所发生的事情。您有一个空列表(ename.indexOf(result[i].getParticipateEntityName())),IndexOutOfBoundsException返回1,因此ArrayList。换句话说,您有一个大小为0的列表,并且您正尝试在索引1处插入元素。

考虑使用{{1}} {{1}}方法将新元素追加到列表的末尾。

答案 1 :(得分:0)

看起来ername或wrname是一个空数组列表。 ername.size()可能会顺便返回0 ...

您要么使用add(Object object)方法,要么可以通过插入以下代码来初始化容量:

for (int i = 0; i < CAPACITY; i++){
   ername.add(null);
}

然后你的代码应该有用......