Я возвращаюсь к Java после краткого изучения его в старшей школе, чтобы работать с lwjgl git book .Есть раздел, который как бы теряет меня, где фрагментный шейдер / вершинный шейдер должен быть загружен с использованием функции 'getResourceAsStream'.
Я пробовал разные подходы и тщетно пытался отладить / распечатать местагде JVM искала файл, но я немного растерялся.Я очень запутался, но также предпочел бы понять, почему этот код не работает на моей машине, и как заставить его работать (с этим подходом к загрузке пакетов / классов).
Поскольку оба класса совместно используюткласс 'main', я думал, что JVM будет искать там, начиная с папки 'resources'.Но, похоже, это не так.
Я действительно думаю, что это связано с объявлениями пакетов, но я не понимаю достаточно, чтобы продолжить.
Вот соответствующие файлы иместоположения ... Я пытался включить только то, что мне показалось важным.
// 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 (), чтобы он не возвращал ноль?