我以为这个问题已经被问过并回答了!
- Class.getResource() 和有什么区别
ClassLoader.getResource()?
getClass().getResource()
相对于 .class 文件进行搜索getClass().getClassLoader().getResource()
相对于的搜索
类路径根。
如果这里有 SSCCE,我不明白为什么没有
1) 显示 .jar 中的目录组织,并且...
2) 考虑封装
问:什么(如果有的话)尚未得到答复Class.getResource() 和 ClassLoader.getResource() 有什么区别?(及其引用的链接)?
=================================================== =======================
我仍然不确定有什么不清楚,但这个例子可能会有所帮助:
/*
SAMPLE OUTPUT:
ClassLoader.getResource(/subdir/readme.txt): NULL
Class.getResource(/subdir/readme.txt): SUCCESS
ClassLoader.getResource(subdir/readme.txt): SUCCESS
Class.getResource(subdir/readme.txt): NULL
*/
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/2012:
Hi -
我从github上逐字复制了你的代码,重新编译并重新运行:
ClassLoader.getResource(/subdir/readme.txt): NULL
Class.getResource(/subdir/readme.txt): SUCCESS
ClassLoader.getResource(subdir/readme.txt): SUCCESS
Class.getResource(subdir/readme.txt): NULL
如果那是not你得到的输出......我很困惑。
不管它的价值如何,我正在跑步:
抱歉,我们无法解决我的问题thought这是一个简单的问题:(
2012 年 11 月 21 日附录(Andreas):
由于最近没有关于这个问题的活动,我想总结一下我们的发现:
- From our common understanding, the answer to the above question is: "No, it is not possible that
Class.getResource("/path/image.png")
returns a valid URL, while ClassLoader.getResource("path/image.png")
returns null":
- 我们完全清楚 ClassLoader.getResource() 和 Class.getResource() 之间的区别
- 我们的示例输出匹配“SUCCESS”和“null”
- 示例输出符合我们的预期
- 结论:要么是我们监督了某些事情,要么是某些不同的事情导致了链接问题中描述的“解决方案”起作用。我认为我们目前无法证明其中之一。