Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.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 9.0 | ClassLoader::getResourceAsStream:NullPointerException_Java_Classloader_Java 9_Getresource - Fatal编程技术网

Java 9.0 | ClassLoader::getResourceAsStream:NullPointerException

Java 9.0 | ClassLoader::getResourceAsStream:NullPointerException,java,classloader,java-9,getresource,Java,Classloader,Java 9,Getresource,下面这段代码,我从“/resource”文件夹中的文件夹中获取文件,在Java 8中运行良好: //e.g fileName = "folder0/file1.extension2" ClassLoader classLoader = ResourceLoader.class.getClassLoader(); InputStream in = classLoader.getResourceAsStream(fileName); Scanner scanner = new Scanner(in

下面这段代码,我从“/resource”文件夹中的文件夹中获取文件,在Java 8中运行良好:

//e.g fileName = "folder0/file1.extension2"

ClassLoader classLoader = ResourceLoader.class.getClassLoader();
InputStream in = classLoader.getResourceAsStream(fileName);
Scanner scanner = new Scanner(in, "UTF-8");
在Java 9中,classLoader.getResourceAsStream(文件名)返回空值:

java.lang.NullPointerException: source
但是,如果我直接使用“/resource”文件夹中的文件,这可以正常工作:

fileName = "file0.extension1"; // It works!
我的问题很明显,老实说,有两个问题:

  • 发生了什么事
  • 我们如何解决这个问题
  • 这是我的项目结构

    *.jar输出结构:

    *.jar:
    - javaFolder1
        -javaFolder1.1
            -ResourceLoader.class
            -jclass1.1.2.class
            -jclass1.1.3.class
        -javaFolder1.2
    - javaFolder2
        - ..
    - ..
    
    - unreachableResourceFolderImTryingToAccess1
        -resource1.1.ext
        -resource1.2.ext
    - unreachableResourceFolderImTryingToAccess2
        - ..
    - unreachableResourceFolderImTryingToAccess3
        - ..
    -resource0.1.ext
    -resource0.2.ext
    - ..
    
    - somedll1.dll
    - somedll2.dll
    - ..
    

    在module_info.java文件中,您必须打开文件,例如,文件所在的包名为“resources”,如果该包位于另一个名为“resources_module”的包中,则代码为:

    exports resources_module;
    opens resources;
    opens resources.(the name of another folder inside the package);
    
    现在您可以访问该文件夹

    如何从其他类访问资源

  • 在包“resources\u module”中创建一个空类
  • 从另一个类(包括其他模块)获取
    InputStream
    ,必须调用之前创建的类(空类),如下所示:

    (您的空类).class.getResourceAsStream(路径)


  • resource
    文件夹如何在您的类路径上结束?@OliverCharlesworth,/src/main/resources中的所有文件和文件夹都位于my.jar文件的根目录下。在使用Maven和
    JDK 9.0.1
    vs
    JDK 1.8.0\u 121
    导出可运行jar时,没有得到相同的行为,嗯,虽然很奇怪,但从eclipse导出时得到了相同的行为,注意到eclipse在jar文件中创建了一个文件夹resources.try
    /folder0/file1.extension2
    如果jar文件确实包含更新问题中列出的资源,则调用ResourceLoader.class.getResourceAsStream(name),其中name是“/resource0.1.txt”、“/unreachableResourceFolderImTryingToAccess1/resource1.1.ext”、“jclass1.1.2.class”、“/javaFolder1/javaFolder1.1/jclass1.1.2.class”应该可以工作。如果使用“resource0.1.txt”调用ResourceLoader.class.getClassLoader().getResourceAsStream(名称),“UnreablereSourceFolderImtryingtoaccess1/resource1.1.ext”/javaFolder1/javaFolder1.1/jclass1.1.2.class”。JDK8和JDK9之间没有区别。