gpt4 book ai didi

Java 9.0 |类加载器::getResourceAsStream: NullPointerException

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:00:20 26 4
gpt4 key购买 nike

下面这段代码,我从“/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(fileName) 返回 null:

java.lang.NullPointerException: source

但是,如果我直接使用“/resource”文件夹中的文件,则效果很好:

fileName = "file0.extension1"; // It works!

我的问题很明显,老实说,有两个问题:

  1. 发生了什么事?
  2. 如何解决?

这是我的项目结构:

enter image description here

*.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);

现在您可以访问该文件夹了。

如何访问其他类(class)的资源

  1. 在包“resources_module”中创建一个空类
  2. 要从另一个类(包括其他模块)获取 InputStream,您必须像这样调用之前创建的类(空类):

    (你的空类).class.getResourceAsStream(path);

关于Java 9.0 |类加载器::getResourceAsStream: NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47613602/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com