我有一个问题,这个电话
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上我不必这样做..
答案 0 :(得分:2)
您的资源路径以/
开头,因此是绝对路径。如果您希望资源路径是相对的,则必须省略第一个/
。
来自Class.getResource(String name)
的Javadoc:
如果名称以'/'('\ u002f')开头,则绝对名称为 资源是'/'后面的名称部分。
否则,绝对名称的格式如下: modified_package_name / name其中的modified_package_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帐户是否具备所有必要的权限
权限(对于文件和文件路径上的文件夹)。如果文件确实是
在那里,然后权限可能是问题。