【发布时间】:2019-05-26 01:06:30
【问题描述】:
在高中短暂学习 Java 以通过 lwjgl git book 工作后,我正在重新审视 Java。使用函数“getResourceAsStream”来加载片段着色器/顶点着色器的地方让我有些不知所措。
我尝试了不同的方法,但徒劳地尝试调试/打印 JVM 正在搜索文件的位置,但我有点不知所措。我很困惑,但也希望了解为什么这段代码不能在我的机器上工作,以及如何让它工作(使用这种包/类加载方法)。
由于这些类都共享“主”类,我认为 JVM 会从那里开始搜索“资源”文件夹。但这似乎并非如此。
我确实认为这与包声明有关,但我理解得不够深入。
以下是相关文件和位置...我试图只包含我认为重要的内容。
// project-root/src/main/java/org/lwjglb/engine/Utils.java
package main.java.org.lwjglb.engine;
// other imports...
public class Utils {
public static String loadResource(String fileName) {
InputStream in = class.forName(Utils.class.getName()).getResourceAsStream(fileName);
// 'in' is null after this call
// other code...
}
}
// project-root/src/main/java/org/lwjglb/game/Renderer.java
import main.java.org.lwjgl.engine.Utils;
// other imports...
public class Renderer {
public void init() {
Utils.loadResource("/vertex.vs"); // fails
}
}
// project-root/src/main/resources/vertex.vs
// vertex shader code...
问题在于 getResourceAsStream() 调用返回 null,因此以下依赖于有效结果的代码会因 java.lang.NullPointerException 而崩溃。
我应该将什么路径传递给 getResourceAsStream() 以便它不会返回 null?
【问题讨论】: