2013-11-15 2 views
0

Я пытаюсь добавить метод с помощью Inetadress в параметр, который будет вызывать статический метод в другом классе с теми же параметрами, однако мой код будет вызывать checkerror.Ошибка метода 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

Смежные вопросы