Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么class.getResource()在指定的路径上有一个资源时仍然返回null?_Java_Eclipse_Class_Getresource - Fatal编程技术网

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读出来,你就会明白了。很好的解释!:)