7

我有问题,这个电话

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上我不必这样做..

4

3 回答 3

2

您的资源路径以 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");
    }
}

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

于 2014-02-09T11:08:39.977 回答
0

似乎您没有对 resourcePath 位置的读取权限尝试将值放入您有权访问的资源路径中,即您应该能够看到该文件

于 2014-02-09T10:50:08.050 回答
0

检查运行 Java 程序的 Linux 帐户是否具有所有必要的
权限(对于文件和文件路径上的文件夹)。如果文件确实
存在,那么权限可能是问题所在。

于 2014-02-09T10:52:01.410 回答