2011-01-10 17 views
5

Bazı dinamik kodlar (Javassist kullanarak) oluşturmaya çalışıyorum, ancak çift dizi veya kayan dizi dahilinde belirli bir noktada program başarısız oluyor.Doğrulama Hatası: opc_invokeinterface için tutarsız args_size

testapp1.Customers temp=(testapp1.Customers)graph; 
    output.processDouble(temp.Dubs[1]); 

aşağıdaki Ama sorun getDeclaredConstructors c.getDeclaredConstructors() çağrıldığında doğar olarak

Class c = Customers.class; // called in main & Customer class just has a double[] Dubs = new double[10] 
CreateType(c); // Main 


public static Object CreateType(Class genericType) 
{ 
     // some preReq declarations 
     CtMethod writeCode = dyn.getDeclaredMethod("processCode"); 

     generateCode(genericType, Code, "temp"); // Code is a StringBuilder class 

     System.out.println(Code); 

     writeCode.insertAt(1, Code.toString()); // Compilation is successful 

     Class c = dyn.toClass(); 

     Dynamic h; 
     Constructor[] ctorlist = null; 

     ctorlist = c.getDeclaredConstructors(); // Problem is here 

     h = (DynamicSurrogate) ctorlist[0].newInstance(genericType); 

     return h; 
} 

Oluşturulan kodudur aşağıdaki gibi kod aşağıdaki hatayı

İstisna atar ... olduğunu "ana" java.lang.VerifyError iş parçacığı: (class: testapp1/Dyn, method: processDouble imza: (Lsomething/Output; Ljava/lang/Object;) V) opc_invokeinterface için tutarsız args_size

bir geçici çözüm var ancak herhangi bir anlam ifade etmiyor, yani dinamik kod

testapp1.Customers temp=(testapp1.Customers)graph; 
    double[] d = temp.Dubs; 
    output.processDouble(d); 

yılında ise ben sadece çift dizinin bir kopyasını oluşturmak ve dinamik kod yani içinde processDouble onu geçmek eğer her şey iyi çalışır short, exception Unhandled getDeclaredConstructor tarafından atılır ama aslında bir kurucu ile ilgisi yoktur çünkü bir tane oluşturmazsa veya bir

Sorunum ve kod yeterince açıksa, herhangi bir karışıklık varsa lütfen ilerleyin :)

cevap

0

Doğrulama getDeclaredConstructors dışına hata atılır çünkü bu, c sınıfındaki bytecodes'in doğrulandığı ilk yerdir.

Hatanın sebebi ile ilgili olarak, ilk durumda bir çifte geçiş yaptığınız ve ikinci durumda da bir çifte [] olduğundan şüpheleniyorum.