2013-11-15 4 views
0

동일한 매개 변수를 사용하는 다른 클래스에서 정적 메서드를 호출하는 매개 변수에 Inetadress 메서드를 추가하려고합니다. 그러나 내 코드가 verifyerror를 throw합니다.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를 지정하지 않았기 때문에 당신이 인스턴스 메서드를 만듭니다. 따라서 변수 0에는 this이 있으므로 최대 지역 변수의 개수가 잘못되어 변수 0의 내용을 정적 대상 메소드로 전달하는 것은 잘못된 것입니다. VerifierError에게 구체적인 메시지를 알려주지 않았습니까?

대상 메서드는 실제로 I이라고하며 클래스 I.Z에 선언되어 있습니까?

+0

예 I.Z.I가 맞습니다. – user2997204