Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java getClass().getResource(resourcePath)在windows上有效,在Linux上为null_Java_Linux_Windows_Getresponse - Fatal编程技术网

Java getClass().getResource(resourcePath)在windows上有效,在Linux上为null

Java getClass().getResource(resourcePath)在windows上有效,在Linux上为null,java,linux,windows,getresponse,Java,Linux,Windows,Getresponse,我有个问题,这个电话 URL文件URL=getClass().getResource(resourcePath) 在Windows(764b)上工作,但在linux(Ubuntu13.1064b)上不工作,在linux上返回null 为什么??文件存在,字符串如下(相对路径) 两个文件都在我家 编辑:该项目是新克隆的,我忘了清理和构建,对此表示抱歉。。所以现在它找到了他们。然而,这很奇怪,因为即使我修改,比如说,vertex_shader.glsl,我的程序将始终引用旧版本,每次我编辑它时,我都

我有个问题,这个电话

URL文件URL=getClass().getResource(resourcePath)

在Windows(764b)上工作,但在linux(Ubuntu13.1064b)上不工作,在linux上返回null

为什么??文件存在,字符串如下(相对路径)

两个文件都在我家


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

似乎您没有对resourcePath位置的读取权限
尝试在您有权访问的resourcePath中输入值,即您应该能够看到文件

检查运行Java程序的Linux帐户是否具有所有必要的
权限(用于文件路径上的文件和文件夹)。如果文件确实是

那么,权限可能就是问题所在

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

Class.getResource(字符串名)
的Javadoc:

如果名称以“/”(“\u002f”)开头,则 资源是名称中“/”后面的部分

否则,绝对名称的形式如下: 修改的\u包\u名称/名称,其中修改的\u包\u名称为 用“/”替换“.”的此对象的包名(“\u002e”)

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

例如:

package org.example;

public class MyClass {
    public void foo() {
        getClass().getResource("tut01/shaders/vertex_shader.glsl");
    }
}
假设编译器将编译后的类文件写入
/home/myproject/bin/org/example/MyClass.class


getClass().getResource(“tut01/shaders/vertex_shader.glsl”)
然后会在
/home/my project/bin/org/example/tut01/shaders/vertex_shader.glsl中查找该文件,我想这取决于您为
resourcePath
传递的内容。是的,我是在你写评论时添加的:)文件的确切路径是什么?(在Windows和Linux上)@immibis On Linux/home/elect/Documents/modern jogl examples/modern jogl examples/src/tut01/shaders/fragment_shader.glsl On win我明天会告诉你,因为我现在没有访问权限。你在使用IDE吗?如果是,哪一个?如果没有,类路径上是否有/home/elect/Documents/modern jogl examples/modern jogl examples/src/?尝试使用sudo运行Netbeans,但没有成功。。相信使用sudo自动运行Netbeans会以相应的权限运行java应用程序,这合法吗?好吧,这不是Netbeans,而是您在其中创建的java程序。我不认为你可以假设,除非你在一些官方文件页面上阅读它。我将编译程序并在NetBeans之外运行它。如果您的程序太复杂,请编写一些小程序来帮助您隔离/检测它是否确实是权限问题。但是,项目和数据的所有内容都位于我的主文件夹中,它应该具有必要的权限。。。不过,我会尽力按照你说的去做。您知道如何访问IDE之外的资源吗?
package org.example;

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