簡體   English   中英

NULL InputStreamReader ClassPath 的指針

[英]NULL Pointer at InputStreamReader ClassPath

嗨,可悲的是,我只是不明白為什么我會收到一個空指針:

我的資源加載器 class

public static String loadResource(String path){
       StringBuilder result = new StringBuilder();
       try {
           InputStreamReader isr = new InputStreamReader(Class.class.getResourceAsStream(path)) ;
           BufferedReader reader = new BufferedReader(isr);
           String line = "";
           while((line = reader.readLine()) != null){
                result.append(line).append("\n");
           }
       }catch (IOException e){
           System.out.println("File nicht gefunden:  " + e);
       }
    return result.toString();
    }

這是我使用它的地方

shaderProgram.createVertexShader(ResourceLoader.loadResource("shaders/mainVertex.glsl"));
shaderProgram.createFragmentShader(ResourceLoader.loadResource("shaders/mainFragment.glsl"));

這是我收到的例外

java.lang.NullPointerException
    at java.base/java.io.Reader.<init>(Reader.java:167)
    at java.base/java.io.InputStreamReader.<init>(InputStreamReader.java:72)
    at utils.ResourceLoader.loadResource(ResourceLoader.java:13)
    at graphics.Renderer.init(Renderer.java:32)
    at GameEngine.init(GameEngine.java:43)
    at GameEngine.run(GameEngine.java:33)
    at Main.main(Main.java:9)

Process finished with exit code 0

感謝您的關注!

正如 NomadMaker 指出的那樣,問題在於電話

new InputStreamReader(Class.class.getResourceAsStream(path))

返回 null 值(您會將此視為錯誤消息的一部分)。

這應該適合你:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Objects;

public class Main {

    public static void main(String[] args) {
        String filepath = "test.txt";
        System.out.println(loadResource(filepath));
    }

    public static String loadResource(String path) {
        InputStream is = Main.class.getClassLoader().getResourceAsStream(path);
        StringBuilder result = new StringBuilder();
        try (InputStreamReader isr = new InputStreamReader(Objects.requireNonNull(is));
             BufferedReader reader = new BufferedReader(isr)) {
            String line;
            while ((line = reader.readLine()) != null) {
                result.append(line).append("\n");
            }
        } catch (IOException | NullPointerException e) {
            System.out.println("File nicht gefunden:  " + e);
        }
        return result.toString();
    }
}

要記住的問題:

  1. 完成這些操作后,您需要關閉 InputStreamReader 和 BufferedReader。 我在這里使用了 try-with-resources (如果這對您來說是新的,請參閱官方文檔)。

  2. 此代碼假定您存儲了從資源文件夾中讀取的文件。 如果找不到該文件,將引發 NPE 錯誤,我將其包含在 catch 中。 您可以選擇以不同的方式處理異常。

  3. 此代碼還假定您在 static 上下文中工作。 如果沒有,請改用this.class.getClass()getClassLoader().getResourceAsStream(path)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM