我想知道为什么方法getResource
不断返回null
,我有以下设置:
public static URL getResource(String path){
URL url = ResourceLoader.class.getResource(path);
if (Parameters.DEBUG){
System.out.println(path);
}
return url;
}
Eclipse中的项目结构如下:
-- res
-- img
我传递给path
的{{1}}变量的值为getResource
或"/res/img"
。然而,该方法不断返回"/res/img/smile.png"
并且未设置null
。我还按照this question的说明,通过运行配置将文件夹添加到项目的类路径中,仍未成功...有谁知道我做错了什么?
答案 0 :(得分:5)
简答:使用"/img/smile.png"
。
实际发生的是,任何以/
开头的路径都被视为相对于类路径中的每个条目。
如屏幕截图所示,res
目录就是这样的类路径条目。因此,Class.getResource方法将您提供的路径视为相对于该条目。含义,相对于res
目录。
因此,该方法将您的字符串参数与该目录相结合,从而产生res/res/img/smile.png
。由于该位置不存在文件(资源),因此返回null。
答案 1 :(得分:1)
http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getResource(java.lang.String)
搜索与给定类关联的资源的规则是 由类的定义类加载器实现。这种方法 委托给这个对象的类加载器。如果加载此对象 引导类加载器,该方法委托给 ClassLoader.getSystemResource(java.lang.String中)。在授权之前, 绝对资源名称是从给定的资源名称构造的 使用这个算法:
如果名称以'/'('\ u002f')开头,则绝对名称为 资源是'/'后面的名称部分。
否则,绝对名称的格式如下: modified_package_name / name其中modified_package_name是 这个对象的包名称用'/'代替'。' ( '\ u002e')。