NullPointerException при запуске моего плагина Bukkit

Я получаю следующее java.lang.NullPointerException при включении моего плагина. Я не вижу проблемы.

Ошибка:

java.lang.NullPointerException
at tk.mypalsgaming.TARDIScraft.TARDIScraft.onDisable(TARDIScraft.java:31)
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:219)
at org.bukkit.plugin.java.JavaPluginLoader.disablePlugin(JavaPluginLoader.java:481)
at org.bukkit.plugin.SimplePluginManager.disablePlugin(SimplePluginManager.java:401)
at org.bukkit.plugin.SimplePluginManager.disablePlugins(SimplePluginManager.java:394)
at org.bukkit.craftbukkit.v1
package tk.mypalsgaming.TARDIScraft;

import java.util.logging.Logger;

import net.milkbowl.vault.permission.Permission;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;

public class TARDIScraft extends JavaPlugin {

    Logger console = getLogger();

    @Override
    public void onEnable() {

        console.info("Enabling the TARDIS plugin...");

        // TODO: onEnable code

    }

    @Override
    public void onDisable() {

        console.info("Disabling the TARDIS plugin...");

        // TODO: onDisable code

    }

    public static Permission permission = null;

    @SuppressWarnings("unused")
    private boolean setupPermissions()
    {
        RegisteredServiceProvider<Permission> permissionProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.permission.Permission.class);
        if (permissionProvider != null) {
            permission = permissionProvider.getProvider();
        }
        return (permission != null);
    }

    public void onPlayerJoin(PlayerJoinEvent evt) {

        Player player = evt.getPlayer();

        if ( player.hasPermission("TARDIScraft.admin") ) {

            console.info("Admin " + player.getName() + " has joined the game.");

        }

    }

    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {

        if ( cmd.getName().equalsIgnoreCase("tardis") ) {

            boolean senderIsPlayer;

            if ( sender instanceof Player ) {

                senderIsPlayer = true;

            } else senderIsPlayer = false;

            // TODO: tardis Command

            if ( args[0].equalsIgnoreCase("admin") ) {

                Player playerToAdmin = Bukkit.getPlayer(args[1]);
                if ( playerToAdmin != null ) {

                    permission.playerAdd(playerToAdmin, "TARDIScraft.admin");

                }

            }

            return true;

        } else {

            return false;
        }

    }

}
R2.CraftServer.disablePlugins(CraftServer.java:281) at net.minecraft.server.v1
package tk.mypalsgaming.TARDIScraft;

import java.util.logging.Logger;

import net.milkbowl.vault.permission.Permission;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;

public class TARDIScraft extends JavaPlugin {

    Logger console = getLogger();

    @Override
    public void onEnable() {

        console.info("Enabling the TARDIS plugin...");

        // TODO: onEnable code

    }

    @Override
    public void onDisable() {

        console.info("Disabling the TARDIS plugin...");

        // TODO: onDisable code

    }

    public static Permission permission = null;

    @SuppressWarnings("unused")
    private boolean setupPermissions()
    {
        RegisteredServiceProvider<Permission> permissionProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.permission.Permission.class);
        if (permissionProvider != null) {
            permission = permissionProvider.getProvider();
        }
        return (permission != null);
    }

    public void onPlayerJoin(PlayerJoinEvent evt) {

        Player player = evt.getPlayer();

        if ( player.hasPermission("TARDIScraft.admin") ) {

            console.info("Admin " + player.getName() + " has joined the game.");

        }

    }

    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {

        if ( cmd.getName().equalsIgnoreCase("tardis") ) {

            boolean senderIsPlayer;

            if ( sender instanceof Player ) {

                senderIsPlayer = true;

            } else senderIsPlayer = false;

            // TODO: tardis Command

            if ( args[0].equalsIgnoreCase("admin") ) {

                Player playerToAdmin = Bukkit.getPlayer(args[1]);
                if ( playerToAdmin != null ) {

                    permission.playerAdd(playerToAdmin, "TARDIScraft.admin");

                }

            }

            return true;

        } else {

            return false;
        }

    }

}
R2.MinecraftServer.stop(MinecraftServer.java:349) at net.minecraft.server.v1
package tk.mypalsgaming.TARDIScraft;

import java.util.logging.Logger;

import net.milkbowl.vault.permission.Permission;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;

public class TARDIScraft extends JavaPlugin {

    Logger console = getLogger();

    @Override
    public void onEnable() {

        console.info("Enabling the TARDIS plugin...");

        // TODO: onEnable code

    }

    @Override
    public void onDisable() {

        console.info("Disabling the TARDIS plugin...");

        // TODO: onDisable code

    }

    public static Permission permission = null;

    @SuppressWarnings("unused")
    private boolean setupPermissions()
    {
        RegisteredServiceProvider<Permission> permissionProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.permission.Permission.class);
        if (permissionProvider != null) {
            permission = permissionProvider.getProvider();
        }
        return (permission != null);
    }

    public void onPlayerJoin(PlayerJoinEvent evt) {

        Player player = evt.getPlayer();

        if ( player.hasPermission("TARDIScraft.admin") ) {

            console.info("Admin " + player.getName() + " has joined the game.");

        }

    }

    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {

        if ( cmd.getName().equalsIgnoreCase("tardis") ) {

            boolean senderIsPlayer;

            if ( sender instanceof Player ) {

                senderIsPlayer = true;

            } else senderIsPlayer = false;

            // TODO: tardis Command

            if ( args[0].equalsIgnoreCase("admin") ) {

                Player playerToAdmin = Bukkit.getPlayer(args[1]);
                if ( playerToAdmin != null ) {

                    permission.playerAdd(playerToAdmin, "TARDIScraft.admin");

                }

            }

            return true;

        } else {

            return false;
        }

    }

}
R2.MinecraftServer.run(MinecraftServer.java:445) at net.minecraft.server.v1
package tk.mypalsgaming.TARDIScraft;

import java.util.logging.Logger;

import net.milkbowl.vault.permission.Permission;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;

public class TARDIScraft extends JavaPlugin {

    Logger console = getLogger();

    @Override
    public void onEnable() {

        console.info("Enabling the TARDIS plugin...");

        // TODO: onEnable code

    }

    @Override
    public void onDisable() {

        console.info("Disabling the TARDIS plugin...");

        // TODO: onDisable code

    }

    public static Permission permission = null;

    @SuppressWarnings("unused")
    private boolean setupPermissions()
    {
        RegisteredServiceProvider<Permission> permissionProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.permission.Permission.class);
        if (permissionProvider != null) {
            permission = permissionProvider.getProvider();
        }
        return (permission != null);
    }

    public void onPlayerJoin(PlayerJoinEvent evt) {

        Player player = evt.getPlayer();

        if ( player.hasPermission("TARDIScraft.admin") ) {

            console.info("Admin " + player.getName() + " has joined the game.");

        }

    }

    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {

        if ( cmd.getName().equalsIgnoreCase("tardis") ) {

            boolean senderIsPlayer;

            if ( sender instanceof Player ) {

                senderIsPlayer = true;

            } else senderIsPlayer = false;

            // TODO: tardis Command

            if ( args[0].equalsIgnoreCase("admin") ) {

                Player playerToAdmin = Bukkit.getPlayer(args[1]);
                if ( playerToAdmin != null ) {

                    permission.playerAdd(playerToAdmin, "TARDIScraft.admin");

                }

            }

            return true;

        } else {

            return false;
        }

    }

}
R2.ThreadServerApplication.run(SourceFile:582)

plugin.yml:

name: TARDIScraft
main: tk.mypalsgaming.TARDIScraft.TARDIScraft
version: 0.0.1
depend: [Vault]
commands:
   tardis:
      description: TARDIS Command Block and Admin Command
      usage: /<command> <TARDIS command> [parameters]
      permission: TARDIScraft.admin
      permission-message: You are not a TARDIS Admin, so you do not have access to this command.

TARDIScraft.java:

package tk.mypalsgaming.TARDIScraft;

import java.util.logging.Logger;

import net.milkbowl.vault.permission.Permission;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;

public class TARDIScraft extends JavaPlugin {

    Logger console = getLogger();

    @Override
    public void onEnable() {

        console.info("Enabling the TARDIS plugin...");

        // TODO: onEnable code

    }

    @Override
    public void onDisable() {

        console.info("Disabling the TARDIS plugin...");

        // TODO: onDisable code

    }

    public static Permission permission = null;

    @SuppressWarnings("unused")
    private boolean setupPermissions()
    {
        RegisteredServiceProvider<Permission> permissionProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.permission.Permission.class);
        if (permissionProvider != null) {
            permission = permissionProvider.getProvider();
        }
        return (permission != null);
    }

    public void onPlayerJoin(PlayerJoinEvent evt) {

        Player player = evt.getPlayer();

        if ( player.hasPermission("TARDIScraft.admin") ) {

            console.info("Admin " + player.getName() + " has joined the game.");

        }

    }

    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {

        if ( cmd.getName().equalsIgnoreCase("tardis") ) {

            boolean senderIsPlayer;

            if ( sender instanceof Player ) {

                senderIsPlayer = true;

            } else senderIsPlayer = false;

            // TODO: tardis Command

            if ( args[0].equalsIgnoreCase("admin") ) {

                Player playerToAdmin = Bukkit.getPlayer(args[1]);
                if ( playerToAdmin != null ) {

                    permission.playerAdd(playerToAdmin, "TARDIScraft.admin");

                }

            }

            return true;

        } else {

            return false;
        }

    }

}

person Piper McCorkle    schedule 22.07.2013    source источник
comment
Если я правильно прочитал источник/ошибку, проблемная строка будет console.info("Disabling the TARDIS plugin...");. Единственное, что может быть null в этой строке кода, это console. Кстати, что с «почти каждой второй пустой строкой»? Большинство этих пустых строк мало или совсем ничего не делают, чтобы помочь людям понять поток кода, поэтому они просто тратят место на экране впустую.   -  person Andrew Thompson    schedule 23.07.2013
comment
Чтобы добавить больше, заявленное @AndrewThompson. У вас есть метод getLogger(), который, похоже, не определен в вашем коде, предположим, что он возвращает экземпляр Logger.   -  person Smit    schedule 23.07.2013
comment
@AndrewThompson, раньше я так кодировал, теперь я перестал так кодировать.   -  person Piper McCorkle    schedule 01.12.2013
comment
возможный дубликат Что такое нулевой указатель Исключение и как его исправить?   -  person Unihedron    schedule 27.10.2014


Ответы (1)


Исключение NullPointerException связано с вызовом «getLogger()». Родительский класс "JavaPlugin" должен иметь initialize() вызывается до создания регистратора. Поскольку вы получаете регистратор во время создания экземпляра, а не после вызова initialize(), родительский класс возвращает значение null.

В документации предлагается просто вызвать getLogger() внутри ваших onEnable() и onDisable(), вероятно, потому что инициализируется () был вызван к тому времени.

Примечание. В исходном коде указано НЕ вызывать initialize() самостоятельно!

Видеть:

  1. https://github.com/Bukkit/Bukkit/blob/master/src/main/java/org/bukkit/plugin/java/JavaPlugin.java#L246

  2. http://wiki.bukkit.org/Plugin_Tutorial#Logging_a_message

person Carl Mastrangelo    schedule 23.07.2013