在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) ...
我该如何解决这个问题?
答案 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);
}