getClass()。getResource(resourcePath)在Windows上有效,在Linux上为null

时间:2014-02-09 10:44:02

标签: java linux windows getresponse

我有一个问题,这个电话

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

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

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

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

这两个文件都在我的家中

编辑:这个项目刚刚被克隆,我忘了清理&建造,对不起..所以现在它找到了它们。然而这很奇怪,因为即使我修改了,例如,vertex_shader.glsl,我的程序将始终引用旧版本,每次我编辑它时,我都需要做清洁&建立以便看到变化......为什么?在Windows上我不必这样做..

3 个答案:

答案 0 :(得分:2)

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

来自Class.getResource(String name)的Javadoc:

  

如果名称以'/'('\ 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中查找该文件。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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