Question

Je reçois NullPointerException, ne savent pas ce qui est en fait à l'origine. J'ai lu de documents java qui jette FileInputStream ne SecurityException donc ne comprends pas pourquoi cette exception apparaît. voici mon extrait de code.

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;
}

et voici mon 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);
Était-ce utile?

La solution

Si la ligne 41 est this.prop.load(in); alors il semble que this.prop == null

Ajoutez un point d'arrêt sur la ligne pour vérifier.

essayer d'appeler une méthode sur un résultat d'instance NULL dans un NullPointerException.

Autres conseils

Le null prop variable lorsqu'elle est en cours d'exécution sur la ligne 41? Essayez le débogage de votre programme pour vérifier. par exemple. ajouter

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

En outre, NullPointerException est une exception non contrôlée de manière est pas documentée dans Javadoc.

Je pense que les autres intervenants ont fait un travail de juste pour expliquer votre problème.

Couple de pointeurs:

  1. Je remarque que vous attrapez certaines exceptions, mais pas les jeter. Si vous ne jetez pas l'exception alors il n'y a pas de point dans les attraper.

  2. En second lieu, pour vous éviter NPE devriez toujours vérifier si l'un de votre objet est nul avant d'exécuter quoi que ce soit sur l'objet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top