Java BufferedReader空指针异常类资源

Java BufferedReader空指针异常类资源,java,parsing,reader,Java,Parsing,Reader,我有一个用于OBJ文件和MTL文件的解析器,但是我不断得到一个空指针异常,即使它存在。我知道我的文件是正确的,因为我仔细检查了文件的位置。资源(源文件)/res/mesh/{}.obj、.mtl 这是我的MyFile类 package com.darkermincraft.utils; 导入java.io.BufferedReader; 导入java.io.InputStream; 导入java.io.InputStreamReader; 公共类MyFile{ 私有静态最终字符串文件_SEPAR

我有一个用于OBJ文件和MTL文件的解析器,但是我不断得到一个空指针异常,即使它存在。我知道我的文件是正确的,因为我仔细检查了文件的位置。资源(源文件)/res/mesh/{}.obj、.mtl

这是我的MyFile类

package com.darkermincraft.utils;
导入java.io.BufferedReader;
导入java.io.InputStream;
导入java.io.InputStreamReader;
公共类MyFile{
私有静态最终字符串文件_SEPARATOR=“/”;
私有字符串路径;
私有字符串名称;
公共MyFile(字符串路径){
this.path=文件\分隔符+路径;
字符串[]dirs=path.split(文件分隔符);
this.name=dirs[dirs.length-1];
}
公共MyFile(字符串…路径){
this.path=“”;
用于(字符串部分:路径){
this.path+=(文件\分隔符+部分);
}
字符串[]dirs=path.split(文件分隔符);
this.name=dirs[dirs.length-1];
}
公共MyFile(MyFile文件,字符串子文件){
this.path=file.path+文件\分隔符+子文件;
this.name=子文件;
}
公共MyFile(MyFile文件、字符串…子文件){
this.path=file.path;
用于(字符串部分:子文件){
this.path+=(文件\分隔符+部分);
}
字符串[]dirs=path.split(文件分隔符);
this.name=dirs[dirs.length-1];
}
公共字符串getPath(){
返回路径;
}
@凌驾
公共字符串toString(){
返回getPath();
}
公共输入流getInputStream(){
返回Class.Class.getResourceAsStream(路径);
}
public BufferedReader getReader()引发异常{
试一试{
InputStreamReader isr=新的InputStreamReader(getInputStream());
BufferedReader读取器=新的BufferedReader(isr);
返回读取器;
}捕获(例外e){
System.err.println(“无法获取“+路径”的读取器);
投掷e;
}
}
公共字符串getName(){
返回名称;
}
}
这是我的解析器类

package com.darkermincraft.graphics.mesh;
导入java.util.ArrayList;
导入java.util.List;
导入org.joml.Vector3f;
导入com.darkerminecraft.utils.MyFile;
公共类网格加载器{
公共静态网格load3DModel(字符串文件名){
MyFile objFile=newmyfile(“res/mesh/”+fileName+”.obj”);
字符串行=”;
字符串mtlFileName=“”;
字符串currentFaceMat=“”;
网格=新网格();
试一试{
而((line=objFile.getReader().readLine())!=null){
String[]lineParts=line.split(“”);
开关(线路子串(0,2)){
案例“v”:
顶点v=新顶点(createVector(lineParts));
网格添加顶点(v);
打破
案例“vn”:
法线n=新法线(createVector(lineParts));
网格。添加法线(n);
打破
案例“mt”:
mtlFileName=lineParts[1];
打破
案例“美国”:
currentFaceMat=线零件[1];
打破
案例“f”:
面=创建面(currentFaceMat,lineParts);
网格。添加面(面);
打破
}
objFile.getReader().close();
}
}捕获(例外e){
e、 printStackTrace();
}
MyFile mtlFile=新的MyFile(“res/mesh/”+mtlFileName+“.mtl”);
材料材料=空;
试一试{
而((line=mtlFile.getReader().readLine())!=null){
String[]lineParts=line.split(“”);
开关(线路子串(0,2)){
案例“ne”:
材料=新材料(线零件[1]);
网格。添加材料(线零件[1],垫);
打破
案例“Ka”:
mat.setKa(createVector(lineParts));
打破
案例“Kd”:
mat.setKd(createVector(lineParts));
打破
案例“Ks”:
mat.setKs(createVector(lineParts));
打破
案例“Ns”:
材料设置(Float.parseFloat(lineParts[1]);
打破
案例“d”:
材料设置(Float.parseFloat(lineParts[1]);
打破
案例“il”:
mat.setIllum(Float.parseFloat(lineParts[1]);
打破
}
mtlFile.getReader().close();
}
}捕获(例外e){
e、 printStackTrace();
}
mesh.normalArray=新浮点[mesh.vertices.size()*3];
用于(面:网格面){
解码法线(面标记1,网格);
解码法线(面标记2,网格);
解码法线(面标记3,网格);
}
列表材质属性=新的ArrayList();
用于(面:网格面){
顶点v1=新顶点(面.材质,面.标记1);
顶点v2=新顶点(面.材质,面.标记2);
顶点v3=新顶点(面.材质,面.标记3);
添加材料属性(v1);
材料属性。添加(v2);
添加材料属性(v3);
}
mesh.vertexArray=新浮点[mesh.Vertexs.size()*3];
mesh.indexArray=newint[mesh.indexes.size()*3];
mesh.colorArray=新浮点[mesh.vertices.size()*3];
int VERTEXPOINT=0;
int colorPointer=0;
用于(顶点:网格.顶点){
mesh.vertexArray[VertexInter++]=vertex.getPosition().x