我有问题,这个电话
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/