尝试从自定义YAMLConfiguration加载项目时出现MemorySection.get错误

时间:2015-01-10 14:04:03

标签: java yaml bukkit

在Bukkit插件中,我有一个自定义的YAML文件“locale.yml”,其中存储了不同的语言和字符串。在没有使用语言环境文件的情况下加载插件时,会创建它和其他文件,但是当命令获得语言环境字符串时,会出现内部错误。请注意,在文件仍然存在的情况下重新加载时会修复此问题。

加载文件的代码如下:

if (!localeFile.exists()) {
    this.saveResource("locale.yml", false);
    InputStream locStream = this.getResource("locale.yml");
    if(locStream != null){
        locale.setDefaults(locale);
    }
}

我理解locale.setDefaults(locale);导致无限递归,但我想不出任何其他解决方案。我试图删除它,删除错误,而是返回“null”(因为没有要加载的文件。这是 NOT 由服务器重新加载修复)。

堆栈跟踪(重复此操作):

at org.bukkit.configuration.MemorySection.get(MemorySection.java:198) ...

at org.bukkit.configuration.MemorySection.getDefault(MemorySection.java:705) ...

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我自己用以下方法解决了这个问题:

if (localeFile == null) {
    File localeFile = new File(this.getDataFolder(), "locale.yml");
}
locale = YamlConfiguration.loadConfiguration(localeFile);

// Look for defaults in the jar
Reader localeStream = new InputStreamReader(this.getResource("locale.yml"));
if (localeStream != null) {
    YamlConfiguration loc = YamlConfiguration.loadConfiguration(localeStream);
    locale.setDefaults(loc);
}