FileInputStream создает исключение NullPointerException - PullRequest
0 голосов
/ 16 апреля 2010

Я получаю 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;
}

и вот моя трассировка стека:

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 ]

1 голос
/ 16 апреля 2010

Является ли переменная prop null, когда она выполняется в строке 41? Попробуйте отладить вашу программу, чтобы проверить это. например добавить

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

Кроме того, исключение NullPointerException является непроверенным исключением, поэтому оно не задокументировано в Javadoc.

1 голос
/ 16 апреля 2010

Я думаю, что другие рецензенты проделали хорошую работу, объяснив вашу проблему.

Пара указателей:

  1. Я заметил, что вы ловите определенные исключения, но не бросаете их. Если вы не выбросите исключение, то нет смысла их ловить.

  2. Во-вторых, чтобы избежать NPE, вы всегда должны проверять, является ли какой-либо из ваших объектов нулевым, прежде чем выполнять что-либо на объекте.

1 голос
/ 16 апреля 2010

Если строка 41 равна this.prop.load(in);, то кажется, что this.prop == null

Добавьте точку останова на линии для проверки.

Попытка вызова метода для нулевого экземпляра приводит к NullPointerException.

...