getClass().getResource(resourcePath) 在 windows 上有效,在 Linux 上为 null

ele*_*ect 7 java linux windows getresponse

我有问题,这个电话

URL fileURL = getClass().getResource(resourcePath);

适用于 Windows (7 64b) 但不适用于返回 null 的 linux (Ubuntu 13.10 64b)。

为什么?文件在那里,字符串如下(相对路径)

String resourcePath = "/tut01/shaders/vertex_shader.glsl"
Run Code Online (Sandbox Code Playgroud)

两个文件都在我家

编辑:该项目是新克隆的,我忘了清理和构建,抱歉..所以现在它找到了它们。然而,这很奇怪,因为即使我修改了 vertex_shader.glsl,我的程序也将始终引用旧版本,每次编辑它时,我都需要执行清理和构建才能看到更改...为什么?在 Windows 上,我不必这样做..

ecl*_*pmd 1

您的资源路径以 a 开头/,因此是绝对路径。如果您希望资源路径是相对的,则必须省略第一个/.

来自 Javadoc Class.getResource(String name)

如果名称以“/”(“\u002f”) 开头,则资源的绝对名称是“/”后面的名称部分。

否则,绝对名称采用以下形式:modified_pa​​ckage_name/name,其中modified_pa​​ckage_name 是该对象的包名称,其中“/”替换为“.”。('\u002e')。

相对路径是相对于 所返回的类的路径getClass()

一个例子:

package org.example;

public class MyClass {
    public void foo() {
        getClass().getResource("tut01/shaders/vertex_shader.glsl");
    }
}
Run Code Online (Sandbox Code Playgroud)

假设编译器将编译后的类文件写入/home/my-project/bin/org/example/MyClass.class.

getClass().getResource("tut01/shaders/vertex_shader.glsl")然后会在 中查找该文件/home/my-project/bin/org/example/tut01/shaders/vertex_shader.glsl