Java 为什么class.getResource()在指定的路径上有一个资源时仍然返回null?
我想知道为什么方法Java 为什么class.getResource()在指定的路径上有一个资源时仍然返回null?,java,eclipse,class,getresource,Java,Eclipse,Class,Getresource,我想知道为什么方法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 -
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
传递给getResource
的path
变量的值为“/res/img”
或“/res/img/smile.png”
。然而,该方法不断返回null
,并且未设置url
。我还按照的说明,通过运行配置将文件夹添加到项目的类路径,但仍然没有成功。。。有人知道我做错了什么吗
搜索与给定类关联的资源的规则如下
由类的定义类装入器实现。这种方法
委托到此对象的类装入器。如果此对象是由加载的
引导类装入器,方法委托给
ClassLoader.getSystemResource(java.lang.String)。在代表团之前,请
绝对资源名称是根据给定的资源名称构造的
使用此算法:
如果名称以“/”(“\u002f”)开头,则
资源是名称中“/”后面的部分
否则,绝对名称的形式如下:
修改的\u包\u名称/名称,其中修改的\u包\u名称为
用“/”替换“.”的此对象的包名(“\u002e”)
简短回答:使用“/img/smile.png”
实际发生的情况是,给定给Class.getResource方法的任何以/
开头的路径始终被视为相对于类路径中的每个条目
如屏幕截图所示,res
目录就是这样一个类路径条目。因此Class.getResource方法将您提供的路径视为相对于该条目的路径。意思是相对于res
目录
因此,该方法将字符串参数与该目录相结合,从而生成
res/res/img/smile.png
。由于该位置不存在文件(资源),因此返回null。感谢您的回复!因此,如果理解正确,在我的例子中,以下内容适用:如果名称以“/”开头(“\u002f”),那么资源的绝对名称就是名称中“/”后面的部分。
但是为什么这不是有效的资源呢?最简单的理解方法是使用带有空字符串的getResource(“”)。这将为您提供类所在包的URL。然后,只要把那个URL读出来,你就会明白了。很好的解释!:)