Java.lang.NullPointerException错误

时间:2016-12-23 23:24:33

标签: java

我正在尝试为游戏RuneScape运行私人服务器。过了一段时间,我的一个玩家去了一个迷你游戏,我在名为pestcontrol的服务器上编程了。玩家试图加入它但是为了能够启动它,他需要5个其他玩家才能使用它。所以,他退出了。但之后他的账号被取消了,导致其他人也被淘汰了。我设法解决了这个问题。但后来他看不见了,我看不出他的角色。 那么我通过声明以下内容来解决这个问题:

if (player == null)
return;

这确实有效,让他再次可见。 但是这个异常行仍然会出现错误:

java.lang.NullPointerException
at net.kagani.game.player.controllers.pestcontrol.PestControlLobby.forceClose(PestControlLobby.java:52)
at net.kagani.game.player.ControlerManager.forceStop(ControlerManager.java:317)
at net.kagani.game.player.ControlerManager.login(ControlerManager.java:66)
at net.kagani.game.player.Player.sendInit(Player.java:1396)
at net.kagani.game.player.Player.run(Player.java:1233)
at net.kagani.game.player.Player.start(Player.java:886)
at net.kagani.executor.PlayerHandlerThread.initPlayer(PlayerHandlerThread.java:273)
at net.kagani.executor.PlayerHandlerThread.processLoginSession(PlayerHandlerThread.java:231)
at net.kagani.executor.PlayerHandlerThread.run(PlayerHandlerThread.java:65)

如果有人可以帮我解决这个问题(重定向我),因为我愿意学习很多东西。 这是班级本身:

package net.kagani.game.player.controllers.pestcontrol;

import net.kagani.Settings;
import net.kagani.game.WorldObject;
import net.kagani.game.minigames.pest.Lander;
import net.kagani.game.player.controllers.Controller;
import net.kagani.utils.Utils;

public final class PestControlLobby extends Controller {
    private Lander lander;

    @Override
    public void start() {
        this.lander = Lander.getLanders()[(Integer) getArguments()[0]];
    }

    @Override
    public void sendInterfaces() {
        if (player == null)
            return;
        int remainingTime = lander.getTimer().getMinutes();
        player.getPackets().sendIComponentText(407, 3,
                Utils.fixChatMessage(lander.toString()));
        player.getPackets().sendIComponentText(
                407,
                13,
                "Next Departure: " + remainingTime + " minutes "
                        + (!(remainingTime % 2 == 0) ? " 30 seconds" : ""));
        player.getPackets().sendIComponentText(407, 14,
                "Player's Ready: " + lander.getByStanders().size());
        player.getPackets().sendIComponentText(407, 16,
                "Commendations: " + player.getCommendation());
        player.getInterfaceManager().sendMinigameInterface(407);
    }

    @Override
    public void magicTeleported(int teleType) {
        player.getControlerManager().forceStop();
    }

    @Override
    public boolean sendDeath() {
        player.getControlerManager().forceStop();
        return true;
    }

    @Override
    public void forceClose() {

        player.getInterfaceManager().removeMinigameInterface();
        System.err.println("This is 1 error output that declares it here");
        lander.exit(player);
    }

    @Override
    public boolean logout() {
        lander.remove(player);
        return false;
    }

    @Override
    public boolean canSummonFamiliar() {
        player.getPackets()
                .sendGameMessage(
                        "You feel it's best to keep your Familiar away during this game.");
        return false;
    }

    @Override
    public boolean processObjectClick1(WorldObject object) {
        switch (object.getId()) {
            case 14314:
            case 25629:
            case 25630:
                player.getDialogueManager().startDialogue("LanderD");
                return true;
        }
        return true;
    }
}

1 个答案:

答案 0 :(得分:-1)

player.getInterfaceManager()尚未初始化,因此在尝试使用forceClose关闭游戏时会出现NullPointerException(请参阅堆栈跟踪的第二行)。

我建议暂时在空检查中包装player.getInterfaceManager(),然后在假设它可以访问的情况下计算为什么这是null。

我建议阅读更多有关如何阅读堆栈跟踪的内容,以便您可以立即获取这些内容。