2012-01-18 1 views
1

J'essaie maintenant d'ajouter un PE simple dans mon application. Ce PE étend AbstractPE et remplace la méthode de sortie (ne rien faire) J'ai aussi révisé le fichier xml, l'ajout d'un haricot, comme suit:.Array Index Out Of Bounds lorsque S4 initie PE

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

Mais, quand je tentais de lancer la plate-forme. Certaines exceptions se produisent.

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 

Code de ce 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                                    

     }                                              
} 

Je confonds maintenant. Je ne sais pas quel tableau cela signifie. Toute aide est appréciée!

Dans le 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);                                  

} 

la ligne 209 est: branchInstructions.get ....

+2

Montrez-nous le code pour 'RogerPE' et une réponse suivra sûrement :-) – millhouse

+0

le code est ajouté, thx. – Qinghao

+0

Cette exception se produit toujours, même sans constructeur. – Qinghao

Répondre

0

Je pense que le code d'erreur est:

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

si branchInstructions.size() == 0, puis branchInstructions.size() - 1 gagnent -1, mais -1 est un index non valide .

+0

cela a vraiment fonctionné! Merci! – Qinghao

+0

Mais je ne sais pas ce que cette instruction if peut causer. J'espère que ça peut bien fonctionner. :-) – Qinghao

+0

Ne vous inquiétez pas, l'instruction if n'a pas d'effet secondaire. – Alanmars

0

Pour commencer, vous devez faire appel au constructeur super()premier.

Sinon, vous travaillez avec un objet qui n'a pas été complètement initialisé. Cela va probablement résoudre votre problème.

Deuxièmement, pourquoi créer un List<String> vide et le convertir si tout ce que vous voulez vraiment est un tableau String vide?

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

Mais après avoir supprimé tout le constructeur. Cette exception existe toujours. – Qinghao

+0

Je ne pense pas que ce soit les clés. La pile montre que l'exception se produit lorsque la super méthode est appelée. C'est pourquoi je l'ai mis dernier. – Qinghao

+0

J'ai supprimé le constructeur entier et cette exception se produit toujours. :-) – Qinghao

Questions connexes