ClassLoader.getSystemResourceAsStream(className)在尝试加载类文件资源时返回null

时间:2011-10-13 00:55:09

标签: java class resources classloader

Class clazz = ...;
InputStream is = ClassLoader.getSystemResourceAsStream(clazz.getName().replace('.', '/') + ".class");

输入流返回null。我已经使用了一个简单的java检测代理来记录加载的类,并且类(clazz)肯定是由ClassLoader加载的。我也试过了

... Thread.currentThread().getContextClassLoader().getResourceAsStream(...));

并且它也返回null。什么可能导致类加载器无法找到资源?

2 个答案:

答案 0 :(得分:2)

Class显然已经被一个不同的ClassLoader加载,而不是你试图找到它。试试这个:

InputStream is = clazz.getClassLoader().getResourceAsStream(
    clazz.getName().replace('.', '/') + ".class");

缺少JVM中的缺陷,我认为不可能返回null。

答案 1 :(得分:1)

你试过getClass()。getClassLoader()。getResourceAsStream() 请确保您在类代码的类路径中加载的类文件。 请同意请分享clazz.getName()的价值?

编辑:

你在做类似的事吗?

Class clazz = Dummy.class;
InputStream is = ClassLoader.getSystemResourceAsStream(clazz.getName().replace('.', '/') + ".class");

我的意思是说你将clazz定义为 ClassName .class?如果没有,那么尝试这样做,然后看看。