将Java版本从1.8更改为13的问题

时间:2019-09-19 17:07:57

标签: java eclipse

我在Windows上的Eclipse中工作。 我试图将Java的版本从1.8更改为13,但出现此错误:

  

线程“ main”中的异常java.lang.NullPointerException

     

在java.base / java.io.Reader。(Reader.java:167)

     

在java.base / java.io.InputStreamReader。(InputStreamReader.java:72)

问题出在我加载数据的函数中。您对我该有什么建议?

代码:

    private static int loadShader(String file, int type){
        StringBuilder shaderSource = new StringBuilder();
        try{
            InputStream in = Class.class.getResourceAsStream(file);
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            String line;
            while((line = reader.readLine())!=null){
                shaderSource.append(line).append("//\n");
            }
            reader.close();
        }catch(IOException e){
            e.printStackTrace();
            System.exit(-1);
        }
        int shaderID = GL20.glCreateShader(type);
        GL20.glShaderSource(shaderID, shaderSource);
        GL20.glCompileShader(shaderID);
        if(GL20.glGetShaderi(shaderID, GL20.GL_COMPILE_STATUS )== GL11.GL_FALSE){
            System.out.println(GL20.glGetShaderInfoLog(shaderID, 500));
            System.err.println("Could not compile shader!");
            System.exit(-1);
        }
        return shaderID;
    }

1 个答案:

答案 0 :(得分:2)

Java模块化

InputStream in = Class.class.getResourceAsStream(file);

可疑。

Java 9引入了Java Platform Module System。这意味着Class.getResourceAsStream()只能找到与该类位于同一模块中的资源。我怀疑您的着色器资源是否在java.base模块中。

用声明您的Class方法的类的名称替换loadShader()

InputStream in = MyClass.class.getResourceAsStream(file);

(假设loadShader()是在类MyClass中声明的)