我在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;
}
答案 0 :(得分:2)
行
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
中声明的)