2016-08-01 2 views
0

このエラーが発生しています。私は正直なところ、この問題を修正するために何も考えていません。ヌルポインタインベントリからItemStackを取得する例外

コードはプレーヤーのブートスロットをチェックしてダイヤモンドブーツが付いているかどうかを確認し、そうであれば禁止されているように空気として設定します。

エラー:ここに貼り付ける

大きすぎるので、ここにある:http://pastebin.com/zhzc3Hut

コード:

@EventHandler 
public void onInventoryClickBoots(InventoryClickEvent event) { 
    Player player = (Player) event.getWhoClicked(); 

    if(player.getInventory().getBoots().getType().equals(Material.DIAMOND_BOOTS)){ 
     player.getInventory().setBoots(new ItemStack(Material.AIR)); 
    } 
    else { 
    }  
} 

私も、ヘルメットのための胸板を、この繰り返しエラーを取得していますレギンススロットもあります。

私を助けることができる人のために事前に感謝!何が起こっているのかの説明も大いに評価されるでしょう!

+0

(...)This is because an empty slot in an inventory is a null ItemStack, so if they have nothing in the boots slot, the ItemStack that is returned is null.

:InventoryScanner.onInventoryClickBoots(InventoryScanner.java:93)。上のコードの93行目はどれですか? – Aris2World

+0

if(player.getInventory()。getBoots()。getType()。equals(Material.DIAMOND_BOOTS)){ – CameronOfoluwa

+0

ok。 stacktraceは私たちにNullPointerExceptionがあることを伝えます。初期化されていない参照は、93行目のいずれかになる可能性があります。 getInventory()? getBoots()? getType()?私は、参照にアクセスする前にいくつかのヌルチェックをすることをお勧めします。 nullの場合、最初に見つかったヌル参照を見つけるためのログまたはメッセージを出力します。 – Aris2World

答えて

1

おそらく問題は、getBoots ItemStackが実際にはnullであることです。

この問題を解決するには、最初にそのタイプを確認する前にブートがヌルかどうかを確認する必要があります。

ItemStack boots = player.getInventory().getBoots(); 
if (boots != null) { 
    if (boots.getType().equals(Material.DIAMOND_BOOTS) { 
     player.getInventory().setBoots(null); 
    } 
} 

The_Lone_Devilによって思い出されるよう@Edit

:スタックトレースから

+1

これは、インベントリの空のスロットが空のItemStackなので、ブーツスロットに何もない場合、返されるItemStackはnullであるためです。 –

関連する問題