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中调用一个方法。我不想这么说,但我们可能需要查看更多代码。