What I am trying to do?
我想在特定方法的開始和結束處添加try/catch塊。如何覆蓋類文件(asm.ClassWriter.getCommonSuperClass)?
Why am I overriding asm.ClassWriter.getCommonSuperClass(String class1,String class2)?
我使用的標誌COMPUTE_FRAMES,正因爲如此,asm.ClassWriter.getCommonSuperClass()這個類被調用,它試圖重新加載使用Class.forName()一些類,說的ClassNotFoundException。我讀過某處重寫此方法並確保它獲取這兩個類加載。我得到了規範對象的保持和得到了所有加載的類,但仍有未載入一些類和此方法拋出空指針異常..
Any suggesstions how to override it?
編輯的問題基於以下響應
我明白這裏是:
1.沒有必要使用,而不是COMPUTE_MAXS COMPUTE_FRAMES,如果我想補充的方法,內容的try/catch塊。
2.如果我想爲方法內容添加try/catch塊(假設只有jdk8),那麼我只需要編寫try/catch塊的ASM部分,其餘部分應該到位。
對於一個方法,它是從一個線程調用:
public void execute()throws IOException{
//some code
}
下面的代碼應該添加try/catch塊,不應該給任何Java校驗錯誤?:
private Label startFinally = new Label();
public void visitMaxs(int maxStack, int maxLocals) {
Label endFinally = new Label();
visitTryCatchBlock(startFinally, endFinally, endFinally, "java/lang/Exception");
visitLabel(endFinally);
visitFrame(F_NEW, 0, null, 1, new Object[]{"java/lang/Exception"});
visitVarInsn(ASTORE, 1);
visitVarInsn(ALOAD, 1);
visitMethodInsn(INVOKEVIRTUAL, "java/lang/Exception", "printStackTrace", "()V", false);
visitInsn(RETURN);
}
public void visitCode() {
mv.visitLabel(startFinally);
super.visitCode();
}
爲什麼你認爲這些類是已經加載?班級尚未加載並不罕見。 – Holger