设置变量,但它返回null

时间:2011-12-17 03:15:49

标签: java nullpointerexception

好吧,所以我一直试图解决这个问题几个小时,但我找不到发生这种情况的原因。所以我有三个课程,一个:

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()方法完成后立即执行此操作。

真的很抱歉这一切听起来多么愚蠢。我写这篇文章的时候,我不知道自己在想什么。我用一行代码修复了所有内容。

2 个答案:

答案 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循环中。有任何机会与它有关吗?