好的,我试图在登录时检查玩家的库存,并说明显示名称
public void onPlayerJoin(PlayerJoinEvent event) {
Player p = event.getPlayer();
for (int i = 0; i < p.getInventory().getSize(); i++) {
if (p.getInventory().getItem(i).getType() != null) {
if (!p.getInventory().getItem(i).getItemMeta().getDisplayName().equals("KITS")){
Bukkit.broadcastMessage(i.getItemMeta().getDisplayName());
}
}
}
}
这只会导致错误。
错误日志:
Caused by: java.lang.NullPointerException
at me.BlueJelly.MPSKitPvP.Listeners.PlayerListener.onPlayerJoin(PlayerListener.jav
a:31) ~[?:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_09]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_09]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_09]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_09]
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:425) ~[
craftbukkit.jar:git-Bukkit-1.6.4-R2.0-9-g68d0e57-b2930jnks]
我知道这是一个NullPointerException,但我不知道它是怎么说的。 我希望你理解我写的......
答案 0 :(得分:4)
基于the documentation,我认为不应该p.getInventory().getItem(i).getType() != null
它应该是p.getInventory().getItem(i)!= null
,好像在该插槽中没有Item堆栈试图获取其类型将抛出一个npe
答案 1 :(得分:1)
您的代码中有许多可能存在NullPointerException的地方。
例如:
p.getInventory().getItem(i).getType()
使用报告的行号(31)查找确切的行。 如果您无法调试代码,请使用日志(或简单的souts)来查找空引用。