修复此错误Bukkit的正确方法?

问题描述 投票:0回答:1

您如何解决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
java bukkit
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.