Java: asm.jar中的ClassReader方法执行时找不到类---Class not found
发布网友
发布时间:2022-05-16 20:50
我来回答
共3个回答
热心网友
时间:2024-03-02 00:30
类加载器不同 ,java 系统编译的时候 类加器是默认的 appclassloader,而tomcat 启动的时候 类加载器 是 webappclassloader 由于类加载器不同导致class not found
你用 System.out.println("加载器系统:"+ClassLoader.getSystemClassLoader());
System.out.println("加载器tomcat:"+Test.class.getClassLoader());
分别输出 类加载器类型 ;就可知道;
解决办法:我想了一个别的方式,不用类名用 流的方式
cr = new ClassReader(TFitler.class.getClassLoader().getResourceAsStream("com.Test".replace('.', '/') + ".class"));
这样就能找到类,不会报错!
热心网友
时间:2024-03-02 00:31
【A:JavaProject中的运行结果】 你这副图:你看它导入的是哪一个包里面的ClassReader,先声明,这个包不是在asm-5.0.3.jar ;我刚看了这个jar,包名是这个org.objectweb.asm。
在java项目中的那个ClassReader 你这样用 new ClassReader("com.test")有用,但是到web里面你用的就是asm-5.0.3.jar中的ClassReader ,这时候你new ClassReader("com.test")就有问题了!
这是asm里面的构造函数:
public ClassReader(String paramString)
throws IOException
{
this(a(ClassLoader.getSystemResourceAsStream(paramString.replace('.', '/') + ".class"), true));
}
你看它做的事! 对于com.test,它会把“.”替换成“/”,然后+“.class”,这时候你哪里有这个类啊!
追问【A:JavaProject中的运行结果】这幅图确实是导入了asm的jar。
从构造函数来看,是不是这个方法不能在WEB上应用了?
无论怎样,谢谢你的认真回答!
热心网友
时间:2024-03-02 00:31
你应该给报错信息。