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

发布于 2024-12-09 07:26:59 字数 374 浏览 0 评论 0原文

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

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

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

,它也返回 null。类加载器无法找到资源的可能原因有哪些?

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

The input stream is returning null. I have used a simple java instrumentation agent to log classes as they are loaded and the class (clazz) is definitely being loaded by the ClassLoader. I've also tried

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

and it returns null as well. What would be some possible causes for the resource not being able to be found by the class loader?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

酒儿 2024-12-16 07:26:59

该类显然是由与您尝试查找它的类加载器不同的类加载器加载的。试试这个:

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

如果 JVM 没有缺陷,我认为不可能返回 null。

The Class has apparently been loaded by a different ClassLoader than the ones you're trying to find it with. Try this instead:

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

Short of a flaw in the JVM, I don't think that can possibly return null.

陪你搞怪i 2024-12-16 07:26:59

您是否尝试过 getClass().getClassLoader().getResourceAsStream()
请确保您真正要加载的类文件位于代码的类路径中。
您还可以分享 clazz.getName() 的值吗?

编辑:

你在做类似以下的事情吗?

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

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

Did you try getClass().getClassLoader().getResourceAsStream()
Please make sure that the class file you tru to load in in classpath of your code.
Also couild you please share the value of clazz.getName() ?

EDIT:

Are you doing something like following ?

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

I mean to say that do you define clazz as ClassName.class ? If not then try doing this and then see.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文