Java 为什么我的代码会导致空指针?

Java 为什么我的代码会导致空指针?,java,Java,这是一个例外: java.lang.NullPointerException at com.rs.net.decoders.handlers.InventoryOptionsHandler$2.run(InventoryOptionsHandler.java:512) at com.rs.game.player.CoordsEvent.processEvent(CoordsEvent.java:55) at com.rs.game.player.Player.proces

这是一个例外:

java.lang.NullPointerException
    at com.rs.net.decoders.handlers.InventoryOptionsHandler$2.run(InventoryOptionsHandler.java:512)
    at com.rs.game.player.CoordsEvent.processEvent(CoordsEvent.java:55)
    at com.rs.game.player.Player.processEntity(Player.java:357)
    at com.rs.cores.WorldProcessor.process(WorldProcessor.java:39)
    at com.rs.cores.PriorityProcessor.run(PriorityProcessor.java:10)
代码如下:

清单选项处理程序:

if (object.getId() == 15621) {
    player.getWarriorsGuild().createWarrior(itemId, object);
    player.getDialogueManager().startDialogue(
         (short) 211,
         new String[] {
             "The animator hums. Something seems to be working.",
             "You stand back..." });
    return;
}
现在是player.java中的getWarriorsGuild()方法

public AnimationGame getWarriorsGuild() {
    return warriorsGuild;
}

public AnimationGame warriorsGuild = new AnimationGame(this);
最后但并非最不重要的是,我在AnimationGame中的createWarrior方法

public void createWarrior(int armours, final WorldObject object) {
    final WarriorsArmour sets = WarriorsArmour.forId(armours);
    if (sets == null || sets.getArmour() == null) return;
    if (sets.getArmour()[0] == armours || sets.getArmour()[1] == armours
            || sets.getArmour()[2] == armours) {
        if (player.getInventory().containsItem(sets.getArmour()[0], 1)
                && player.getInventory().containsItem(sets.getArmour()[1],
                        1)
                && player.getInventory().containsItem(sets.getArmour()[2],
                        1)) {
            final boolean running = player.isRunning();
            player.getInventory().deleteItem(sets.getArmour()[0], 1);
            player.getInventory().deleteItem(sets.getArmour()[1], 1);
            player.getInventory().deleteItem(sets.getArmour()[2], 1);
            int newX = player.getX();
            int newY = player.getY() + 5;
            player.setRun(false);
            player.setRunHidden(false);
            player.addWalkSteps(newX, newY, -1, false);
            player.setNextAnimation(new Animation(827));
            player.addStopDelay(3L);
            player.getDialogueManager().startDialogue("WAnimator",
                    new Object[0]);
            WorldTasksManager.schedule(new WorldTask() {

                public void run() {
                    if (!secondloop) {
                        secondloop = true;
                        player.setRunHidden(running);
                    } else {
                        stop();
                    }
                }

                boolean secondloop;
            }, 0, 6);
            WorldTasksManager.schedule(new WorldTask() {

                @Override
                public void run() {
                    final NPC war = new NPC(sets.getNpcId(), new WorldTile(
                            object.getX(), object.getY(), 0), -1, true);
                    war.addWalkSteps(player.getY(), player.getY());
                    player.setNextFaceEntity(war);
                    war.setTarget(player);
                    war.setNextAnimation(new Animation(4166));
                    war.setNextForceTalk(new ForceTalk("I'M ALIVE!"));
                    player.getInterfaceManager().closeChatBoxInterface();
                    player.getInterfaceManager()
                            .closeReplacedRealChatBoxInterface();
                    player.getHintIconsManager().addHintIcon(war, 1, -1,
                            false);
                    player.sendAreaInterface(player);
                    WorldTasksManager.schedule(new WorldTask() {

                        @Override
                        public void run() {
                            war.setFinished(true);
                            war.setForceWalk(new WorldTile(-1, -1, -1));
                            World.removeNPC(war);
                            stop();
                        }

                    }, 60, 60);
                    stop();
                    return;
                }

            }, 3, 3);
        } else {
            return;
        }
        return;
    }
}
我想知道,是什么导致了这个空指针,我不明白?
如果您需要查看更多内容,请毫不犹豫地询问,谢谢:)

检查InventoryOptionHandler类中的object.getId()。我认为您的id为null会导致NullPointerException。

那么,哪一行会引发异常??你没有提供足够的信息来回答这个问题。抛出NPE的行中的一个变量为null,您首先需要找出哪个变量(println可以帮助实现这一点),然后在InventoryOptionHandler中回溯代码以查看它为null的原因。512(其中调用getWarriorsGuild(),则玩家变量为null或
getWarriorsGuild()
方法返回null。在有问题的行上方的行上,添加以下行:
System.out.println(“player为null:+(player==null));
并查看返回的内容。player为null:false,这就是它所说的。然后方法
getWarriorsGuild()
正在返回null,而您正试图从null中调用一个方法。我不想这么说,但我们可能需要查看更多代码。