FileInputStream抛出NullPointerException

时间:2010-04-15 21:22:20

标签: java nullpointerexception fileinputstream

我得到了nullpointerexception,不知道究竟是什么导致了它。我从java文档中读到fileinputstream只抛出securityexception,所以不明白为什么会弹出这个异常。 这是我的代码片段。

private Properties prop = new Properties();
private String settings_file_name = "settings.properties";
private String settings_dir = "\\.autograder\\";

public Properties get_settings() {
    String path = this.get_settings_directory();
    System.out.println(path + this.settings_dir + this.settings_file_name);
    if (this.settings_exist(path)) {
        try {
            FileInputStream in = new FileInputStream(path + this.settings_dir + this.settings_file_name);
            this.prop.load(in);
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    } else {
        this.create_settings_file(path);
        try{
            this.prop.load(new FileInputStream(path + this.settings_dir + this.settings_file_name));
        }catch (IOException ex){
            //ex.printStackTrace();
        }
    }
    return this.prop;
}

private String get_settings_directory() {
    String user_home = System.getProperty("user.home");
    if (user_home == null) {
        throw new IllegalStateException("user.home==null");
    }

    return user_home;
}

这是我的stacktrace:

C:\Users\mohamed\.autograder\settings.properties
Exception in thread "main" java.lang.NullPointerException
        at autograder.Settings.get_settings(Settings.java:41)
        at autograder.Application.start(Application.java:20)
        at autograder.Main.main(Main.java:19)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)

Line 41 is: this.prop.load(in);

3 个答案:

答案 0 :(得分:1)

如果第41行是this.prop.load(in);,那么好像this.prop == null

在该行上添加断点以进行验证。

尝试在空实例上调用方法会产生NullPointerException

答案 1 :(得分:1)

变量prop在第41行执行时是否为null?尝试调试程序以检查这一点。例如添加

if(prop == null)
    System.out.println("prop is null");

此外,NullPointerException是未经检查的异常,因此未在Javadoc中记录。

答案 2 :(得分:1)

我认为其他评论员在解释你的问题时做得很公平。

指点:

  1. 我注意到你正在捕捉某些异常,但却没有抛出它们。如果您没有抛出异常,那么抓住它们是没有意义的。

  2. 其次,为了避免使用NPE,在对对象执行任何操作之前,应始终检查是否有任何对象为null。