Java 3DGame LWJGL GitBook chapter3〜プロジェクトの起動エラー〜

トラブルシューティング

この記事は、chapter3を始めるにあたり画面の起動でエラーが出てしまった時のメモとして記載します。

エラーになった原因(自分のケース) Cause getting Error in Chapter3

出力したエラーログ

java.lang.NullPointerException: source
	at java.util.Objects.requireNonNull(Objects.java:228)
	at java.util.Scanner.(Scanner.java:578)
	at zenryokuservice.gui.lwjgl.tutoriral.gitbook.chapter4.engine.Utils.loadResource(Utils.java:11)
	at zenryokuservice.gui.lwjgl.tutoriral.gitbook.chapter4.game.Renderer.init(Renderer.java:26)
	at zenryokuservice.gui.lwjgl.tutoriral.gitbook.chapter4.game.DummyGame.init(DummyGame.java:22)
	at zenryokuservice.gui.lwjgl.tutoriral.gitbook.chapter4.engine.GameEngine.init(GameEngine.java:50)
	at zenryokuservice.gui.lwjgl.tutoriral.gitbook.chapter4.engine.GameEngine.run(GameEngine.java:38)
	at java.lang.Thread.run(Thread.java:748)
	at zenryokuservice.gui.lwjgl.tutoriral.gitbook.chapter4.engine.GameEngine.start(GameEngine.java:29)
	at zenryokuservice.gui.lwjgl.tutoriral.gitbook.chapter4.game.Main.main(Main.java:13)

上の様なエラーログが出力された場合です。これは上の赤字の部分から追いかけると原因がわかります。

対象のコード(赤い字)

    public static String loadResource(String fileName) throws Exception {
        String result;
        try (InputStream in = Class.forName(Utils.class.getName()).getResourceAsStream(fileName);
                Scanner scanner = new Scanner(in, "UTF-8")) {
            result = scanner.useDelimiter("\\A").next();
        }
        return result;
    }

上記の赤い部分がエラーの出ている行になります。コードを追いかけてみると「in」をScannerで読み取るための準備(Scannerをインスタンス化)をしているところでエラーが起きていますので、「in」「"UTF-8"」が怪しいと睨みます。「"UTF-8」は固定値(定数)なので犯人ではなさそうです。

次に、「in」を追跡します。「in」はInputStream=>ClassクラスのメソッドgetResourceAsStreamを呼び出しているのでそいつを調べます。

引数にある「リソース(ファイル)」を取得するメソッドですので返却する値はInputStreamです。

※ここら辺について記載した記事はこちらです。