如何在Bukkit中修复以下错误?
public class Listeners implements Listener {
private Main plugin = Main.getPlugin(Main.class);
@SuppressWarnings("deprecation")
public void sendWarnTitle(Player player){
player.sendTitle(ChatColor.GRAY + "Ты получишь ничего, если простоишь на точке "+ ChatColor.YELLOW + plugin.getConfig().getInt("time") + "секунд." ,ChatColor.GRAY + "Если сойдёшь с кнопки, то время начнётся заного");
new BukkitRunnable(){
@Override
public void run(){
plugin.time.put(player,plugin.getConfig().getInt("time")); // This is line 37, where the exception is thrown
this.cancel();
}
}.runTaskTimer(plugin,0,60);
}
public void countdown(Player player){
new BukkitRunnable(){
@SuppressWarnings("deprecation")
@Override
public void run() {
if (plugin.time.get(player) > 0) {
plugin.time.put(player, plugin.time.get(player) - 1);
player.sendTitle("",ChatColor.GRAY + "Точка будет захвачена через " + ChatColor.YELLOW + plugin.time.get(player) + "секунд.");
}
if(plugin.time.get(player)== 0){
plugin.time.remove(player);
this.cancel();
}
}
}.runTaskTimer(plugin, 20 ,20);
}
日志:
[Server thread/WARN]: [CapturePlate] Task #3 for CapturePlate v0.1 generated an exception
java.lang.NullPointerException: null
at main.main.Listeners$2.run(Listeners.java:37) ~[?:?]
at org.bukkit.craftbukkit.v1_12_R1.scheduler.CraftTask.run(CraftTask.java:76) ~[spigot-1.12.2.jar:git-Spigot-eb3d921-2b93d83]
at org.bukkit.craftbukkit.v1_12_R1.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:361) [spigot-1.12.2.jar:git-Spigot-eb3d921-2b93d83]
at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:739) [spigot-1.12.2.jar:git-Spigot-eb3d921-2b93d83]
at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:406) [spigot-1.12.2.jar:git-Spigot-eb3d921-2b93d83]
at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679) [spigot-1.12.2.jar:git-Spigot-eb3d921-2b93d83]
at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577) [spigot-1.12.2.jar:git-Spigot-eb3d921-2b93d83]
at java.lang.Thread.run(Thread.java:813) [?:1.8.0_212]
[12:28:24] [Server thread/WARN]: [CapturePlate] Task #5 for CapturePlate v0.1 generated an exception
答案 0 :(得分:1)
在第37行,假设time
在您的主目录中是静态HashMap,您可能会尝试使用get
但该元素不存在,您应该首先执行一个包含检查:>
if(!plugin.time.containsKey(player))
return;
if (plugin.time.get(player) > 0) {
//etc
还有其他一些非功能性问题,但是我想强调不要使用@SuppressWarnings("deprecation")
,因为它只会使插件更新变得更加困难。我认为您这样做是因为sendTitle
已过时,但是如果您阅读sendTitle上的文档,则会发现它由于API behavior subject to change
而已过时,因此不取消警告会为您带来好处