SnakeYAML loadAs () возвращает ноль - PullRequest
0 голосов
/ 07 мая 2018

Сегодня я попытался создать плагин Spigot, и у меня возникла ошибка, которую трудно исправить. Когда я пытался создать файловую систему для сохранения некоторых данных, я скачал исходный код для библиотеки SnakeYAML и поместил его в свой src. Затем я следовал этому руководству и создал конфиг и следовал всем инструкциям. Я получаю исключение NullPointerException. Оказывается, объект конфигурации является нулевым. Я не уверен, что происходит.

PlayerYML getConfig(File playerYml) {
    try {
        InputStream ymlStream = new FileInputStream(playerYml.getAbsolutePath());
        System.out.println(ymlStream);
        PlayerYML config = yaml.loadAs(ymlStream, PlayerYML.class);
        return config;
    } catch (Exception ex) {
        System.out.println("getConfig() error");
        ex.printStackTrace();
        return null;
    }
}

Вот мой класс PlayerYML:

import java.util.Map;

public class PlayerYML {

    private int reputation;
    private Map<String/*UUID*/, String/*Date*/> map;

    public int getReputation() {
        return reputation;
    }

    public void setReputation(int reputation) {
        this.reputation = reputation;
    }

    public Map<String, String> getMap() {
        return map;
    }

    public void setMap(Map<String, String> map) {
        this.map = map;
    } 
}

Я ценю любую помощь! Спасибо:)

1 Ответ

0 голосов
/ 11 мая 2018

Вы пытаетесь загрузить пустой файл / поток как объект, что приведет к нулевому значению с использованием SnakeYAML.

Если вы хотите правильно обработать отсутствие файла вместо того, чтобы просто создать пустой файл, выследует проверить, существует ли он, и напрямую создать экземпляр объекта по умолчанию, если файл не существует.Если вы затем хотите создать файл со значениями по умолчанию, чтобы пользователь мог их редактировать, просто сохраните экземпляр объекта по умолчанию, используя один из методов Yaml.dump *.Таким образом, вы избегаете создания пустого объекта самостоятельно.Вам все равно придется обрабатывать пустые файлы в случае ошибок пользователя.

...