我是Java ASM的新手。我正在尝试使用Java代理和ASM来检测方法。但是,我收到如下错误:
Exception in thread "main" java.lang.NoSuchMethodError: java.io.FileOutputStream$1.<init>(Ljava/io/FileOutputStream;)V
at java.io.FileOutputStream.close(FileOutputStream.java:354)
at sun.nio.cs.StreamEncoder.implClose(StreamEncoder.java:320)
at sun.nio.cs.StreamEncoder.close(StreamEncoder.java:149)
at java.io.OutputStreamWriter.close(OutputStreamWriter.java:233)
at WriteToFileExample.useFileWriter(WriteToFileExample.java:60)
at WriteToFileExample.main(WriteToFileExample.java:30)
我使用的是asm-6.0。
我试着编写简单的测试代码,但它确实有用。但是,对于某些类中的某些方法,它不起作用。我不懂为什么! ClassVisitor正在访问该类,然后对于所有方法,它接受MethodVisitor。如果一个类中没有这样的方法,它如何接受访问者以及为什么它会抛出异常?
答案 0 :(得分:0)
我已经弄清楚了。 FileOutputStream $ 1是FileOutputStram的内部类。使用java代理,我没有获得有关FileOutputStream的信息,而是获取有关FileOutputStream $ 1的信息。但是,在访问方法时,它说没有找到这样的方法名为init,也没有找到其他方法,因为FileOutputStream $ 1中没有init方法。 Init方法在FileOutputStream中。我改变了java代理代码,不处理内部类,而是处理实际的FileOutputStream类,现在没问题了。