好吧,所以我一直试图解决这个问题几个小时,但我找不到发生这种情况的原因。所以我有三个课程,一个:
public void loadFile() throws FileNotFoundException, IOException {
config = new File(m.getUser() + "AppData/Roaming/pseudpixel/config.cfg");
FileReader fr = new FileReader(m.getUser() + "AppData/Roaming/pseudopixel/config.cfg");
BufferedReader br = new BufferedReader(fr);
while((temp = br.readLine()) != null) {
if(temp.startsWith("screenName")) {
tempCache = temp.split(":");
v.setScreenName(tempCache[1]);
} else if(temp.startsWith("screenWidth")) {
tempCache = temp.split(":");
v.setScreenWidth(Integer.parseInt(tempCache[1]));
} else if(temp.startsWith("screenHeight")) {
tempCache = temp.split(":");
v.setScreenHeight(Integer.parseInt(tempCache[1]));
} else if(temp.startsWith("debug")) {
tempCache = temp.split(":");
v.setDebug(tempCache[1]);
}
br.close();
}
}
我在值类中设置值:
public void setScreenName(String s) {
screenName = s;
m.log("ScreenName Set: " + getScreenName() + "\n");
}
public String getScreenName() {
return screenName;
}
public void setScreenWidth(int i) {
screenWidth = i;
m.log("ScreenWidth Set: " + getScreenWidth() + "\n");
}
public Integer getScreenWidth() {
return screenWidth;
}
public void setScreenHeight(int i) {
screenHeight = i;
m.log("ScreenHeight Set: " + getScreenHeight() + "\n");
}
public Integer getScreenHeight() {
return screenHeight;
}
public void setDebug(String b) {
if(b.equals("true")) {
debug = true;
m.log("Debug Set: " + getDebug() + "\n");
} else {
debug = false;
m.log("Debug Set: " + getDebug() + "\n");
}
}
public boolean getDebug() {
return debug;
}
根据我的记录,一切正常。但是当我尝试从这个类中使用get方法获取值时,它会返回一个nullpointer异常。当我从外部类调用get方法时,基本上所有的值都返回null。他们似乎在loadFile()
方法完成后立即执行此操作。
真的很抱歉这一切听起来多么愚蠢。我写这篇文章的时候,我不知道自己在想什么。我用一行代码修复了所有内容。
答案 0 :(得分:2)
您不能set
使用get
方法的值,这是矛盾的。当然,除非您讨厌阅读代码的人并使用get
进行设置,并使用set
来获取变量。
我在考虑您正在尝试使用此类的get
方法设置其他值,在这种情况下,您应该发布它们,然后创建SSCCE。但是既然你没有发布那些代码,我在这里帮助不大。
但是,看起来您没有constructor
来初始化所有值:
public Value() {
screenName = "";
screenWidth = 0;
screenHeight = 0;
debug = false;
}
constructor
的要点是使您的所有值都不是null
。由于您没有,所有内容仍为null
。
然后,当您初始化v
(假设它的类型为Value
)时,您可以像这样调用构造函数:
Value v = new Value();
构造函数还可以使用参数将值预先设置为实例化选择的值。
答案 1 :(得分:2)
我注意到你的br.close()
在while循环中。有任何机会与它有关吗?