栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

可执行jar中Class.getResource()和ClassLoader.getResource()的奇怪行为

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

可执行jar中Class.getResource()和ClassLoader.getResource()的奇怪行为

我以为这个问题已经被问到并回答了!

getClass().getResource()
相对于.class文件进行
getClass().getClassLoader().getResource()
搜索,而相对于classpath根目录进行
搜索。

如果这里有SSCCE,我不明白为什么没有

1)在.jar中显示目录组织,然后…

2)考虑包装

问:Class.getResource()和ClassLoader.getResource()之间有什么区别(如果有的话)?(及其引用的链接)?

================================================== =======================

我仍然不确定不清楚的地方,但是这个例子可能会有所帮助:

package com.so.resourcetest;import java.net.URL;public class ResourceTest {    public static void main(String[] args) {        ResourceTest app = new ResourceTest ();    }    public ResourceTest () {        doClassLoaderGetResource ("/subdir/readme.txt");        doClassGetResource ("/subdir/readme.txt");        doClassLoaderGetResource ("subdir/readme.txt");        doClassGetResource ("subdir/readme.txt");    }    private void doClassLoaderGetResource (String sPath) {        URL url  = getClass().getClassLoader().getResource(sPath);        if (url == null) System.out.println("ClassLoader.getResource(" + sPath + "): NULL");        else System.out.println("ClassLoader.getResource(" + sPath + "): SUCCESS");    }    private void doClassGetResource (String sPath) {        URL url  = getClass().getResource(sPath);        if (url == null) System.out.println("Class.getResource(" + sPath + "): NULL");        else System.out.println("Class.getResource(" + sPath + "): SUCCESS");    }}

这是相应的目录树。它碰巧是一个Eclipse项目,但是目录是相同的,无论是Eclipse,Netbeans …还是.jar文件:

C:.├───.settings├───bin│   ├───com│   │   └───so│   │       └───resourcetest│   └───subdir└───src    ├───com    │   └───so    │       └───resourcetest    └───subdir

正在打开的文件是“ subdir / readme.txt”


附录11/9/12:

嗨-

我从github逐字复制了您的代码,重新编译并重新运行:

ClassLoader.getResource(/subdir/readme.txt): NULLClass.getResource(/subdir/readme.txt): SUCCESSClassLoader.getResource(subdir/readme.txt): SUCCESSClass.getResource(subdir/readme.txt): NULL

如果那 不是 您得到的输出…我感到困惑。

无论值多少,我都在跑步:

  • Eclipse Indigo(没关系)

  • 在IDE内部运行(在IDE内部还是外部都无关紧要是文件系统还是.jar)

  • 我的JRE是1.6(如果有的话,这可能是个大问题)

抱歉,我们无法解决我 认为 很简单的问题:(


附录11/21/12(安德烈亚斯):

由于没有关于此问题的近期活动,所以我想总结一下我们发现的结果:

  • 根据我们的普遍理解,上述问题的答案是: “否,不可能
    Class.getResource("/path/image.png")
    返回有效的URL,而
    ClassLoader.getResource("path/image.png")
    返回null”
    • 我们完全清楚ClassLoader.getResource()和Class.getResource()之间的区别
    • 我们的样本输出匹配“ SUCCESS”和“ null”
    • 样本输出符合我们的期望
    • 结论:我们要么监督了某件事,要么是某件事导致了链接问题中描述的“解决方案”起作用。我认为我们目前无法证明彼此。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/437331.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号