Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java InputStreamReader类路径处的空指针_Java_Nullpointerexception_Resources_Classpath_Inputstreamreader - Fatal编程技术网

Java InputStreamReader类路径处的空指针

Java InputStreamReader类路径处的空指针,java,nullpointerexception,resources,classpath,inputstreamreader,Java,Nullpointerexception,Resources,Classpath,Inputstreamreader,嗨,很遗憾,我不明白为什么我会收到空指针: 我的ResourceLoader类 public static String loadResource(String path){ StringBuilder result = new StringBuilder(); try { InputStreamReader isr = new InputStreamReader(Class.class.getResourceAsStream(path)) ;

嗨,很遗憾,我不明白为什么我会收到空指针:

我的ResourceLoader类

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
java.lang.NullPointerException
位于java.base/java.io.Reader(Reader.java:167)
位于java.base/java.io.InputStreamReader。(InputStreamReader.java:72)
位于utils.ResourceLoader.loadResource(ResourceLoader.java:13)
位于graphics.Renderer.init(Renderer.java:32)
在GameEngine.init(GameEngine.java:43)
运行(GameEngine.java:33)
Main.Main(Main.java:9)
进程已完成,退出代码为0

谢谢你的关注

正如NomadMaker指出的,问题在于通话

newInputStreamReader(Class.Class.getResourceAsStream(path))

返回空值(您可能会将其视为错误消息的一部分)

这应该适合您:

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();
    }
}
需要牢记的问题:

  • 完成这些操作后,需要关闭InputStreamReader和BufferedReader。我在这里使用了一个资源尝试(如果这对您来说是新的,请参考官方)

  • 此代码假定您将从resources文件夹中读取的文件存储在该文件夹中。如果找不到该文件,将抛出一个NPE错误,我将在catch中包含该错误。您可以选择以不同的方式处理异常

  • 此代码还假设您在静态上下文中工作。如果没有,请改用
    this.class.getClass()getClassLoader().getResourceAsStream(路径)


  • 从异常堆栈跟踪来看,Class.Class.getResourceAsStream(path)似乎返回null。这个问题似乎是