Ошибка индекса вне границ - PullRequest
1 голос
/ 29 марта 2010

Я работаю над программой, в которой воссоздаю сохраненные виджеты обратно на граничную панель. Когда я создаю их, я также пытаюсь поместить значения в 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 ......".

Вот стек ошибок:

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 ]

2 голосов
/ 29 марта 2010

Вы не можете использовать public void add(int index, E element) метод List, если не можете гарантировать, что размер вашего списка больше index.

Вот что происходит с вашим кодом. У вас есть пустой список (ername), и ename.indexOf(result[i].getParticipateEntityName()) возвращает 1, то есть IndexOutOfBoundsException. Другими словами, у вас есть список размером 0, и вы пытаетесь вставить элемент с индексом 1.

Попробуйте использовать public boolean add(E e) метод ArrayList, который добавляет новый элемент в конец списка.

0 голосов
/ 29 марта 2010

Ну, похоже, что ername или wrname - это пустой список массивов. ername.size (), вероятно, вернет 0, кстати ...

Вы либо хотите использовать метод add (объектный объект), либо инициализировать емкость, вставив следующий код:

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

и тогда ваш код должен работать ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...