Problem mit isOnline()

Dieses Thema im Forum "Programmierung" wurde erstellt von ThrustLP, 20. April 2014.

  1. ThrustLP
    Offline

    ThrustLP

    Registriert seit:
    3. April 2013
    Beiträge:
    35
    Hallo! Ich habe hier einen simplen code:

    Code (Text):
    1.  
    2. if(cmd.getName().equalsIgnoreCase("test")){
    3. Player check = Bukkit.getServer().getPlayer(ThrustLP);
    4. if(check.isOnline()){
    5.  
    6. p.sendMessage(check + " On");
    7. //FUNKTIONIERT
    8. }else{
    9.  
    10. p.sendMessage(check + " Off");
    11. //ERROR
    12.  
    13.  
    14. }
    15.  
    16.  
    17.  
    18. }
    19.  
    Was muss ich tun um auch die "Off" Message zu bekommen? Danke!
     
    #1
  2. schegar
    Offline

    schegar

    Registriert seit:
    3. Februar 2013
    Beiträge:
    26
    Minecraft:
    schegar10
    bekommst du irgendeine fehlermeldung ?
     
    #2
  3. ThrustLP
    Offline

    ThrustLP

    Registriert seit:
    3. April 2013
    Beiträge:
    35
    Ja:

    Code (Text):
    1.  
    2. [20:31:55 ERROR]: null
    3. org.bukkit.command.CommandException: Unhandled exception executing command 'test
    4. ' in plugin Simple v0.1
    5.         at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[cb.
    6. jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    7.         at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:19
    8. 6) ~[cb.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    9.         at org.bukkit.craftbukkit.v1_7_R1.CraftServer.dispatchCommand(CraftServe
    10. r.java:542) ~[cb.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    11.         at net.minecraft.server.v1_7_R1.PlayerConnection.handleCommand(PlayerCon
    12. nection.java:932) [cb.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    13.         at net.minecraft.server.v1_7_R1.PlayerConnection.a(PlayerConnection.java
    14. :814) [cb.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    15.         at net.minecraft.server.v1_7_R1.PacketPlayInChat.a(PacketPlayInChat.java
    16. :28) [cb.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    17.         at net.minecraft.server.v1_7_R1.PacketPlayInChat.handle(PacketPlayInChat
    18. .java:47) [cb.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    19.         at net.minecraft.server.v1_7_R1.NetworkManager.a(NetworkManager.java:146
    20. ) [cb.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    21.         at net.minecraft.server.v1_7_R1.ServerConnection.c(SourceFile:134) [cb.j
    22. ar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    23.         at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:6
    24. 55) [cb.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    25.         at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:2
    26. 50) [cb.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    27.         at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:5
    28. 45) [cb.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    29.         at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java
    30. :457) [cb.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    31.         at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:6
    32. 17) [cb.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    33. Caused by: java.lang.NullPointerException
    34.         at me.thrustlp.test.Main.onCommand(Main.java:16) ~[?:?]
    35.         at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[cb.
    36. jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    37.         ... 13 more
    38. >
    39.  
     
    #3
  4. Spartaner
    Offline

    Spartaner Gesperrt

    Registriert seit:
    10. Oktober 2012
    Beiträge:
    7
    Ort:
    Deutschland
    Minecraft:
    Spartaner_v1
    Hi,
    ich persönlich benutzt nicht diese Variante sondern vergleiche einfach mit null.
    Code (Text):
    1. Player target = Bukkit.getPlayerExact(/*playername*/);
    2. if(target == null) {
    3.          sender.sendMessage(/*nicht Online*/);
    4. } else {}
    5.  
    Bisher hat dieser Code immer bei mir funktioniert.

    ("null" bleibt null, und kann auch keinen boolean zurückgeben)

    Mit freundlichen Grüßen
    Spartaner
     
    #4
  5. sacha220899
    Offline

    sacha220899

    Registriert seit:
    25. März 2013
    Beiträge:
    178
    Probier mal das:

     
    #5
  6. ThunderFlo
    Offline

    ThunderFlo

    Registriert seit:
    22. September 2013
    Beiträge:
    53

    Ich verstehe denn Sinn deines Codes leider nicht. Wie wäre es wenn du das nicht so machst?

    if (cmd.getName().equalsIgnoreCase("check") {
    if (cs.hasPermissions("Deine.Permission") {
    if (args.length == 1) {
    Player t = Bukkit.getPlayer(args[0]);
    if (t != null) {
    cs.sendMessage("Der Spieler " + args[0] + " ist momentan auf dem Server"));
    } else {
    cs.sendMessage("Der Spieler " + args[0] + " ist momentan leider nicht auf dem Server"));
    }
    }
    } else {
    cs.sendMessage("Du hast keine Erlaubnis dieses Kommando auszuführen!")
    }

    Das hab ich hier nun aus dem Kopf geschrieben es kann sein das ich nen paar klammern etc. vergessen habe aber so sollte es denke ich funktionieren und du müsstest verstanden haben wie es funktioniert :)
     
    #6
  7. Benutzer
    Offline

    Benutzer

    Registriert seit:
    1. November 2012
    Beiträge:
    56

    Du musst doch hierbei den Namen des Spielers also ThrustLP in "" setzen. Oder lieg ich da falsch ?

    MFG Benutzer
     
    #7
  8. crytical
    Offline

    crytical

    Registriert seit:
    18. April 2014
    Beiträge:
    18
    Minecraft:
    TimBone
    #8
  9. Blindhero
    Offline

    Blindhero

    Registriert seit:
    23. Januar 2014
    Beiträge:
    24
    Ort:
    Deutschland
    Minecraft:
    BlinderHeld
    wenn der Spieler nicht online ist, wird wohl check = null sein. ich würde dann stattdessen sagen: p.sendMessage(args[0] + " off);
    oder..
    OfflinePlayer op = getServer().getOfflinePLayer(args[0]);
    p.sendMessage(op.getName() + " off);
     
    #9
  10. delta242
    Offline

    delta242

    Registriert seit:
    28. Mai 2012
    Beiträge:
    90
    Genau, Bukkit gibt bei Bukkit#getPlayer(...) oder bei Bukkit#getPlayerExact(...) null zurück, falls der Spieler nicht online ist. Das bedeutet, falls dein gesuchter Spieler nicht online ist, versucht er die Methode isOnline() aufzurufen, obwohl das dazugehörige Objekt null ist, was wiederum zur NullPointerException führt.Also immer einen Null-Check durchführen.
     
    #10