我有问题,这个电话

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

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

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

String resourcePath = "/tut01/shaders/vertex_shader.glsl"

这两个文件都在我家

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

最佳答案

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

Class.getResource(String name)的Javadoc中:



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

一个例子:

package org.example;

public class MyClass {
    public void foo() {
        getClass().getResource("tut01/shaders/vertex_shader.glsl");
    }
}

假设编译器将编译后的类文件写入/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中查找文件。

关于java - getClass()。getResource(resourcePath)在Windows上有效,在Linux上为null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21658061/

10-11 02:33