2012-10-18 44 views
0

加入我使用ASM將代碼注入到方法:NoClassDefFoundError的錯誤,同時調用方法使用Java ASM

@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) 

請幫忙〜

+0

請先閱讀文檔或手冊。 –

+0

這不會幫助男人!你能弄清楚在哪裏閱讀哪一章?如果我將該類更改爲「java.land.System」並調用nanoTime,它就可以工作。 – Sefler

+0

'NoClassDefFoundError'(粗略地)表示這個類在編譯時存在,但不在運行時 - 你可能在這裏有一個類路徑問題或一個拙劣的JAR文件? –

回答

0

好了,我得到了我的答案。這是因爲注入的類是由引導類加載器加載的,所以注入的代碼無法調用「CopyOfsssss」中的方法。請參閱this article。解決方案是將「-Xbootclasspath/a:/path/yourclass.lib」添加到jvm參數。注意「Xbootclasspath」之後的「/ a」表示追加。