嘿,所以我搜索了很多地方,却一无所获,所以我决定问为什么为什么由于某种原因,插件中的onDisable方法总是出错。它所拥有的只是保存了3个团队的HashMaps并将其放入配置中。这是什么:
@Override
public void onDisable() {
// *********************Saving Human Team**************************
List<String> h = getConfig().getStringList("humanTeam");
for (Player p : humanTeam.keySet()) {
h.add(p.getName());
}
getConfig().set("humanTeam", h);
// ****************************************************************
// *********************Saving Monster Team************************
List<String> m = getConfig().getStringList("monsterTeam");
for (Player p : monsterTeam.keySet()) {
h.add(p.getName() + ":" + monsterTeam.get(p));
}
getConfig().set("monsterTeam", m);
// ****************************************************************
// *********************Saving Monster Team************************
List<String> r = getConfig().getStringList("runnerRole");
for (Player p : runnerRole.keySet()) {
r.add(p.getName());
}
getConfig().set("runnerRole", r);
// ****************************************************************
saveConfig();
}
这是来自服务器的错误:
[20:20:48 INFO]: [MineRunner] Disabling MineRunner v1.0
[20:20:48 ERROR]: Error occurred while disabling MineRunner v1.0 (Is it up to da
te?)
java.lang.NullPointerException
at me.joejoethemonkey.MineRunner.onDisable(MineRunner.java:70) ~[?:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:323) ~[c
raftbukkit.jar:git-Bukkit-33d5de3]
at org.bukkit.plugin.java.JavaPluginLoader.disablePlugin(JavaPluginLoade
r.java:351) [craftbukkit.jar:git-Bukkit-33d5de3]
at org.bukkit.plugin.SimplePluginManager.disablePlugin(SimplePluginManag
er.java:423) [craftbukkit.jar:git-Bukkit-33d5de3]
at org.bukkit.plugin.SimplePluginManager.disablePlugins(SimplePluginMana
ger.java:416) [craftbukkit.jar:git-Bukkit-33d5de3]
at org.bukkit.plugin.SimplePluginManager.clearPlugins(SimplePluginManage
r.java:457) [craftbukkit.jar:git-Bukkit-33d5de3]
at org.bukkit.craftbukkit.v1_8_R1.CraftServer.reload(CraftServer.java:69
4) [craftbukkit.jar:git-Bukkit-33d5de3]
at org.bukkit.Bukkit.reload(Bukkit.java:543) [craftbukkit.jar:git-Bukkit
-33d5de3]
at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:
25) [craftbukkit.jar:git-Bukkit-33d5de3]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:14
0) [craftbukkit.jar:git-Bukkit-33d5de3]
at org.bukkit.craftbukkit.v1_8_R1.CraftServer.dispatchCommand(CraftServe
r.java:625) [craftbukkit.jar:git-Bukkit-33d5de3]
at net.minecraft.server.v1_8_R1.PlayerConnection.handleCommand(PlayerCon
nection.java:1058) [craftbukkit.jar:git-Bukkit-33d5de3]
at net.minecraft.server.v1_8_R1.PlayerConnection.a(PlayerConnection.java
:919) [craftbukkit.jar:git-Bukkit-33d5de3]
at net.minecraft.server.v1_8_R1.PacketPlayInChat.a(SourceFile:37) [craft
bukkit.jar:git-Bukkit-33d5de3]
at net.minecraft.server.v1_8_R1.PacketPlayInChat.a(SourceFile:9) [craftb
ukkit.jar:git-Bukkit-33d5de3]
at net.minecraft.server.v1_8_R1.PacketHandleTask.run(SourceFile:13) [cra
ftbukkit.jar:git-Bukkit-33d5de3]
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [
?:1.8.0_31]
at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_31]
at net.minecraft.server.v1_8_R1.MinecraftServer.z(MinecraftServer.java:6
56) [craftbukkit.jar:git-Bukkit-33d5de3]
at net.minecraft.server.v1_8_R1.DedicatedServer.z(DedicatedServer.java:2
84) [craftbukkit.jar:git-Bukkit-33d5de3]
at net.minecraft.server.v1_8_R1.MinecraftServer.y(MinecraftServer.java:6
09) [craftbukkit.jar:git-Bukkit-33d5de3]
at net.minecraft.server.v1_8_R1.MinecraftServer.run(MinecraftServer.java
:517) [craftbukkit.jar:git-Bukkit-33d5de3]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_31]`enter code here`
最佳答案
好吧,这里有些事情可能是错误的。首先,您可能知道,NullPointerException表示某些内容为null。没有设置任何东西。
这可能是由您使用的get config方法引起的。当您获得配置选项时,建议您使用if(h == null)之类的if语句测试将其放入的变量。如果为空,则需要检查配置和Bukkit文档,以确保正确使用了它。
根据您的异常信息,可能会知道错误的出处,它位于第70行。由于您仅向我展示了一种方法,因此我无法确定哪一行。
我看到的下一件事情是,您正在for循环中使用Player来获取完整的字符串列表。我对bukkkit不太了解,但是我不确定是否可以通过这种方式进行初始化。如果我错了,那很好。但也许您循环中的一名玩家为空,所以请务必检查p == null是否也为空。
您可能会使用一些内容输出到bukkkit控制台,以让您知道if语句是否为空。只要您只在不为空的情况下使用它们,它可能仅适用于一个玩家,并且安全性将被忽略
让我知道事情的后续。