您如何解决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.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
在第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
使您不必取消警告也有好处。