MemorySection.get 尝试从自定义 YAMLConfiguration 加载项目时出错
MemorySection.get error trying to load item from custom YAMLConfiguration
在 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) ...
我该如何解决这个问题?
我自己解决了这个问题,方法是将加载方法替换为:
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);
}
在 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) ...
我该如何解决这个问题?
我自己解决了这个问题,方法是将加载方法替换为:
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);
}