Индекс массива выходит за границы, когда S4 инициирует PE - PullRequest
1 голос
/ 18 января 2012

Я сейчас пытаюсь добавить простой PE в свое приложение.Этот PE расширяет AbstractPE и переопределяет метод вывода. (Ничего не делая) Я также исправил XML-файл, добавив bean-компонент, например:

  <bean id="rogerpe" class="cnu.roger.FPActor.RogerPE">                                                                                                                                       
        <property name="keys">                                                                                                                                                                
                <list>                                                                                                                                                                        
                        <value>RawTransaction *</value>                                                                                                                                       
                </list>                                                                                                                                                                       
        </property>                                                                                                                                                                           
  </bean>

Но когда я пытался запустить платформу.Возникает некоторое исключение.

Caused by: org.springframework.beans.BeanInstantiationException: 
Could not instantiate bean class [cnu.roger.FPActor.RogerPE]: 
Constructor threw exception; nested exception is java.lang.ArrayIndexOutOfBoundsException: -1
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:115)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:61)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:877)
    ... 16 more
Caused by: java.lang.ArrayIndexOutOfBoundsException: -1
    at java.util.ArrayList.elementData(ArrayList.java:338)
    at java.util.ArrayList.get(ArrayList.java:351)
    at io.s4.processor.OverloadDispatcherGenerator.generate(OverloadDispatcherGenerator.java:209)
    at io.s4.processor.AbstractPE.<init>(AbstractPE.java:126)
    at cnu.roger.FPActor.RogerPE.<init>(RogerPE.java:22)
    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:532)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:100)
    ... 18 more

Код этого PE:

package cnu.roger.FPActor;                                                                                                                                                                    

import java.util.Collections;                                                                                                                                                                 
import java.util.List;                                                                                                                                                                        

import io.s4.processor.AbstractPE;                                                                                                                                                            

class RogerPE extends AbstractPE                                                                                                                                                              
{                                                                                                                                                                                             
        @Override                                                                                                                                                                             
        public void output()                                                                                                                                                                  
        {                                                                                                                                                                                     
                // TODO Auto-generated method stub                                                                                                                                            

        }                                                                                                                                                                                     
}

Сейчас я путаюсь.Я не знаю, какой массив это означает.Любая помощь приветствуется!

В OverloadDispatcherGenerator.java

InstructionHandle returnInstruction = il.append(InstructionFactory.createReturn(Type.VOID));                                                                                          

for (int i = 0; i < targetInstructions.size(); i++) {                                                                                                                                 
    branchInstructions.get(i).setTarget(targetInstructions.get(i));                                                                                                                   
}                                                                                                                                                                                     

branchInstructions.get(branchInstructions.size() - 1)                                                                                                                                 
                  .setTarget(returnInstruction);                                                                                                                                      

for (BranchInstruction gotoInstruction : gotoInstructions) {                                                                                                                          
    gotoInstruction.setTarget(returnInstruction);                                                                                                                                     

}

строка 209 выглядит следующим образом: branchInstructions.get ....

Ответы [ 2 ]

0 голосов
/ 18 января 2012

Я думаю, что код ошибки:

branchInstructions.get(branchInstructions.size() - 1)                                                                                                                                 
              .setTarget(returnInstruction); 

если branchInstructions.size () == 0, то branchInstructions.size () - 1 получить -1, но -1 - недопустимый индекс.

0 голосов
/ 18 января 2012

Перво-наперво, вам нужно обратиться к конструктору super() first .

В противном случае вы работаете с объектом, который не был полностью инициализирован.Это, вероятно, решит вашу проблему.

Во-вторых, зачем создавать пустой List<String> и преобразовывать его, если все, что вам действительно нужно, это пустой массив String?

String[] sa = new String[0];
...