2013-11-15 60 views
0

我試圖用Inetadress其中將使用相同的參數另一個類調用 一個靜態方法參數添加一個方法,但是我的代碼將拋出的VerifyError。Java的ASM方法錯誤

MethodNode mv = new MethodNode(ACC_PUBLIC, "startPrivate", "(Ljava/net/InetAddress;)V", null, null); 
    mv.visitCode(); 
    mv.visitVarInsn(ALOAD, 0); 
    mv.visitMethodInsn(INVOKESTATIC, "I/Z", "I", "(Ljava/net/InetAddress;)V"); 
    mv.visitInsn(RETURN); 
    mv.visitMaxs(1, 1); 
    mv.visitEnd(); 
    into.methods.add(mv); 

錯誤:

Exception in thread "main" java.lang.VerifyError: (class: client, method: startPrivate signature: (Ljava/net/InetAddress;)V) Incompatible argument to function 
at java.lang.Class.getDeclaredConstructors0(Native Method) 
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2483) 
at java.lang.Class.getConstructor0(Class.java:2793) 
at java.lang.Class.newInstance(Class.java:345) 
at vanquish.Loader.initializeClient(Loader.java:33) 
at vanquish.Loader.main(Loader.java:25) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 

感謝您的幫助現在的工作:

MethodNode mv = new MethodNode(ACC_PUBLIC, "startPrivate", "(Ljava/net/InetAddress;)V", null, null); 
    mv.visitCode(); 
    mv.visitVarInsn(ALOAD, 1); 
    mv.visitMethodInsn(INVOKESTATIC, "I/Z", "I", "(Ljava/net/InetAddress;)V"); 
    mv.visitInsn(RETURN); 
    mv.visitMaxs(1, 2); 
    mv.visitEnd(); 
    into.methods.add(mv); 

回答

1

既然你沒有指定ACC_STATIC您創建一個實例方法。因此,你必須this內部變量0,那麼你的最大。局部變量的數目是錯誤的和通過可變0的內容的靜態目標方法是錯誤的太。難道不是VerifierError給你一個具體的消息?

是目標方法真的叫I和類I.Z聲明?

+0

是I.Z.I是正確的 – user2997204