Bei einer Abfrage ob etwas null ist NullPointerException?
Hey ho Leude,
Ich hab ein kleines Problem bei meinem Spigot Plugin:
if(config.getString("messages.Join").equals(null)) {
}
Diese if-Abfrage ist laut diesem Fehler Log ein Auslöser für eine NullPointerException:
[17:30:48 ERROR]: Error occurred while enabling JoinMessage v0.1 (Is it up to date?)
java.lang.NullPointerException: null
at de.Yuno.JM.Main.onEnable(Main.java:26) ~[?:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:264) ~[spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:337) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:403) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugin(CraftServer.java:381) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugins(CraftServer.java:330) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
at org.bukkit.craftbukkit.v1_12_R1.CraftServer.reload(CraftServer.java:752) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
at org.bukkit.Bukkit.reload(Bukkit.java:525) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:27) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchCommand(CraftServer.java:648) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchServerCommand(CraftServer.java:634) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
at net.minecraft.server.v1_12_R1.DedicatedServer.aP(DedicatedServer.java:444) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:407) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577) [spigot-1.12.2.jar:git-Spigot-dcd1643-e60fc34]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_261]
Ich verstehe aber nicht wieso. Ich möchte doch Abfragen ob dieser Eintrag in der config nicht vorhanden ist sprich null um ihn dann einen Wert zuteilen zu können
Wenn das nicht geht wie kann ich das sonst machen?
1 Antwort
Du versuchst auf einem nicht vorhandenen Objekt eine Methode aufzurufen. Da das Objekt nicht da ist, ist auch die Methode nicht da.
Probiere
if(config.getString("messages.Join") == null) {
}
Config ist ein Objekt.
Die Methode getString() liefert, wenn möglich, einen String zurrück.
Ein String ist ein Objekt.
Jeder String hat die Methode equals(), die ihn selbst mit einem anderen String vergleicht.
Jetzt hat dir getString() aber keinen String, sondern den Wert null zurückgeliefert, weil in config die Vorraussetzungen zum Liefern eines Strings nicht gegeben sind.
Der Wert null hat natürlich auch keine Methode equals().
Wäre der String nicht null, würde deine Methode funktionieren und zwei Strings miteinander vergleichen, ob sie gleich sind.
== prüft auf "echte gleichheit", also ob zwei Strings identisch (also der selbe String) sind.
Das ist eine Eigenheit von Java, gilt aber zum Glück nur für Strings, alle anderen Werte kannst du normal mit == vergleichen.
a="toller string"
b="toller string"
a==b -> false
a==a -> true
a.equals(b) -> true
Es funktioniert! Danke
Aber wo ist der unterschied wenn ich .equals oder == eingebe?