2016-08-01 29 views
0

Ich bekomme diesen Fehler und ich habe ehrlich gesagt keine Ahnung, was zu tun ist, um es zu beheben, habe ich alles versucht, was ich denken kann.Null Pointer Ausnahme bekommen ItemStack aus Inventar

Der Code ist, um den Boot-Slot des Spielers zu überprüfen, ob er Diamant Stiefel hat, und wenn sie es tun, um es als Luft zu setzen, da es ein verbotener Gegenstand ist.

Der Fehler:

Zu groß, so hier in hier einzufügen ist: http://pastebin.com/zhzc3Hut

Der Code:

@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 { 
    }  
} 

ich auch bin für den Helm dieses wiederholten Fehler bekommen, Brustplatte und Leggings Slot auch.

Vielen Dank im Voraus für jeden, der mir helfen kann! Eine Erklärung dessen, was vor sich geht, würde auch sehr geschätzt werden!

+0

aus dem Stacktrace: InventoryScanner.onInventoryClickBoots (InventoryScanner.java:93). Was ist Zeile 93 im obigen Code? – Aris2World

+0

if (player.getInventory(). GetBoots(). GetType(). Gleich. (Material.DIAMOND_BOOTS)) { – CameronOfoluwa

+0

ok. Wie StackTrace uns sagt, haben wir eine NullPointerException. Die nicht initialisierte Referenz könnte irgendeine auf der Linie 93 sein. Spieler? getInventory()? getBoots()? getType()? Ich schlage vor, vor dem Zugriff auf eine Referenz einige nicht null zu prüfen. Im Falle von null geben Sie ein Protokoll oder eine Nachricht aus, um herauszufinden, welches der erste Nullverweis ist, auf den Sie stoßen. – Aris2World

Antwort

1

Das Problem, dem Sie wahrscheinlich gegenüberstehen, ist, dass der getBoots ItemStack tatsächlich null ist.

Um dieses Problem zu beheben, sollten wir zuerst prüfen, ob die Stiefelstände null sind, bevor Sie den Typ überprüfen.

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

@Edit

Wie The_Lone_Devil erinnerte:

(...)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.

+1

Fügen Sie hinzu, dass dies darauf zurückzuführen ist, dass ein leerer Slot in einer Bestandsliste ein ItemStack von null ist. Wenn sie also nichts im Boot-Slot haben, ist ItemStack, der zurückgegeben wird, null. –