调用使用Java ASM添加的方法时发生NoClassDefFoundError错误
我正在使用ASM向方法注入代码:调用使用Java ASM添加的方法时发生NoClassDefFoundError错误,java,java-bytecode-asm,Java,Java Bytecode Asm,我正在使用ASM向方法注入代码: @Override public void visitCode() { visitMethodInsn(Opcodes.INVOKESTATIC, "sssss/CopyOfsss", "foo", "()V"); super.visitCode(); } Exception in thread "main" java.lang.NoClassDefFoundError: sssss/CopyOfss
@Override
public void visitCode() {
visitMethodInsn(Opcodes.INVOKESTATIC, "sssss/CopyOfsss", "foo", "()V");
super.visitCode();
}
Exception in thread "main" java.lang.NoClassDefFoundError: sssss/CopyOfsss
at java.util.regex.Pattern$Node.match(Pattern.java)
at java.util.regex.Pattern$CharProperty.match(Pattern.java:3345)
at java.util.regex.Pattern$Curly.match0(Pattern.java:3760)
at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
at java.util.regex.Matcher.match(Matcher.java:1127)
at java.util.regex.Matcher.matches(Matcher.java:502)
at sssss.CopyOfsss.main(CopyOfsss.java:26)
请帮忙~好吧,我得到了答案。这是因为注入的类是由引导类装入器装入的,所以注入的代码不能调用“CopyOfssss”中的方法。提到解决方案是在jvm参数中添加“-Xbootclasspath/a:/path/yourclass.lib”。注意,“Xbootclasspath”后面的“/a”表示追加。请先阅读文档或手册。这对人没有帮助!请你想一想在哪里读,读哪一章好吗?如果我将该类更改为“java.land.System”并调用nanoTime,它就会工作。
NoClassDefFoundError
(大致上)意味着该类在编译时存在,但在运行时不存在-您可能有类路径问题或错误的JAR文件吗?正如您在上面看到的,“ssss/copyofss”是主类。它必须存在~这表明它可能是类加载器问题?如果子类加载器加载了CopyOfssss
,调用了其父类加载器加载的类,然后该类尝试静态回调CopyOfssss
,则它将失败(子类CL可以看到父类加载的类,但反之亦然)。