Player ArrayList getName() Frage

Dieses Thema im Forum "Programmierung" wurde erstellt von ThrustLP, 29. März 2014.

  1. ThrustLP
    Offline

    ThrustLP

    Registriert seit:
    3. April 2013
    Beiträge:
    35
    Hallo!
    Ich habe eine ArrayList

    ArrayList<Player> players = new ArrayList<Player>();



    Wenn ich jetzt mache:


    players.add(p.getName());



    Wird mir add angestrichen. Warum? Wie fixe ich das? <Player> muss bleiben.



    Danke
     
    #1
  2. 1. Player Objekte sollten NICHT gespeichert werden.
    2. Lern Java
    3. Ein String ist etwas anderes als ein Player!
     
    #2
    1 Person gefällt das.
  3. [Dev] iTzSasukeHDxLP
    Offline

    [Dev] iTzSasukeHDxLP Ehem. Teammitglied

    Registriert seit:
    5. Januar 2014
    Beiträge:
    938
    Uebersetzung:

    HTML:
    1. p.getName()
    Gibt den Spielernamen als String zurueck. Du willst jedoch das Spielerobjekt in deine Arraylist eintragen(siehe punkt 1 & 3 von manf).

    Also einfach p reinhauen.
     
    #3
  4. ThrustLP
    Offline

    ThrustLP

    Registriert seit:
    3. April 2013
    Beiträge:
    35
    Ok mein Problem ist wenn ich Player zu String ändere dann muss ich bei

    Code (Text):
    1. Player playerOne = players.get(0);
    Player auch zu String ändern und dann habe ich wieder einen Konflikt bei

    Code (Text):
    1. playerOne.sendMessage()


    Wie kann ich das ändern?
     
    #4
  5. Code (Text):
    1. Bukkit.getPlayerExact(String name);
    Damit bekommst du den Spieler, der gerade online ist mit diesem Namen. Ansonsten null.
     
    #5
  6. [Dev] iTzSasukeHDxLP
    Offline

    [Dev] iTzSasukeHDxLP Ehem. Teammitglied

    Registriert seit:
    5. Januar 2014
    Beiträge:
    938
    Wozu einen String ?

    Code (Text):
    1. Player p = (Player) players.get(0);
    Oder einfach

    Code (Text):
    1. players.get(0).sendMessage("Blubb");
    Du hast die Spielerobjekte ja schon in der Arraylist drinstehen..
     
    #6
  7. Weil das Speichern von Player Objekten falsch ist.
     
    #7
  8. ThrustLP
    Offline

    ThrustLP

    Registriert seit:
    3. April 2013
    Beiträge:
    35
    Ich glaub ich bin einfach zu dumm dafür D:

    Also wenn ich ArrayList<String>

    Habe kann ich nicht

    Player p = (Player) players.get(0);

    einfügen weil ich keinen String in einen Player umwandeln kann



    Wenn ich ArrayList<Player>

    Habe geht zwar

    Player p = (Player) players.get(0);

    aber eben wieder nicht

    players.add()



    Sorry aber ich bin Anfänger und dazu noch ziemlich unbegabt!
     
    #8
  9. Mrcookie008
    Offline

    Mrcookie008

    Registriert seit:
    15. Dezember 2011
    Beiträge:
    380
    Ort:
    /home
    Minecraft:
    xCookieZz oder Mrcookie008 (Beides Premium)
    Bitte.. schaff' dir erstmal die Bukkit und Java Grundkenntnisse an.. So hat das keinen Sinn.
     
    #9
  10. Einfügen:

    list.add(p.getName());

    Player temporär hohlen:

    Bukkit.getExactPlayer(list.get(0));
     
    #10
  11. Paulomart
    Offline

    Paulomart

    Registriert seit:
    3. November 2013
    Beiträge:
    148
    Ort:
    C:/Eclipse/Workspace/
    Minecraft:
    Paulomart
    Wieso? Nur weil es null ist wenn der Spieler den Server verlässt oder was?
     
    #11
  12. Du speicherst die nicht nur Referenz. Deswegen bleibt es auch im RAM. Wenn der Spieler den Server wieder betritt gibt es ein neues Player Objekt.
     
    #12
  13. Paulomart
    Offline

    Paulomart

    Registriert seit:
    3. November 2013
    Beiträge:
    148
    Ort:
    C:/Eclipse/Workspace/
    Minecraft:
    Paulomart
    Speichern Listen nicht einfach den Link zum Orginal?

    Bei Variablen ist das ja so:

    Code (Text):
    1.  
    2. String bla1 = "sergdi";
    3. String bla2 = bla1;
    4.  
    5. log(bla1); //sergdi
    6. log(bla2); //sergdi
    7.  
    8. String bla1 = "nix";
    9.  
    10. log(bla1); //nix
    11. log(bla2); //nix
    12.  
    13.  
     
    #13
  14. games6471
    Online

    games6471

    Dafür dass die Referenz gehalten wird, bleibt das Objekt auch im Speicher und wird nicht vom Garbage Collector aufgesammelt.

    Du kannst natürlich mit Weak-/SoftReferenzen (darunter fällt auch WeakHashMap o.ä.) arbeiten, aber ich würde dir eher raten den Spielernamen zu verwenden.
     
    #14
    2 Person(en) gefällt das.
  15. Paulomart
    Offline

    Paulomart

    Registriert seit:
    3. November 2013
    Beiträge:
    148
    Ort:
    C:/Eclipse/Workspace/
    Minecraft:
    Paulomart
    Aber wenn du dann beim QuitEvent die Refferenz löscht, sollte doch eigentlich der Garbage Collector das Objekt löschen oder?
     
    #15
  16. games6471
    Online

    games6471

    Wo wird bitte die Referenz gelöscht?

    Solange noch irgendwo die Referenz gehalten wird verbleibt diese im Speicher, wäre auch ansonsten richtig blöd.
     
    #16
  17. Paulomart
    Offline

    Paulomart

    Registriert seit:
    3. November 2013
    Beiträge:
    148
    Ort:
    C:/Eclipse/Workspace/
    Minecraft:
    Paulomart
    players.remove(event.getPlayer()); ?! onPlayerQuit?
     
    #17
  18. games6471
    Online

    games6471

    Sind dann auch alle Referenzen auf dieses Objekt weg? Nein, da dein Plugin noch mit einer Referenz auf das Objekt zeigt. Es wird also noch nicht vom Garbage Collector aufgesammelt. Du kannst natürlich WeakReferenzen verwenden. Bei diesen wird das Objekt trotzdem gelöscht.

    EDIT: Beachte, dass es mehrere Referenzen geben kann, die auf das selbe Objekt zeigen. Erst wenn es nicht mehr möglich ist auf das Objekt zuzugreifen wird es vom Garbage Collector aufgesammelt (nach einer gewissen Zeit).
     
    #18
  19. Paulomart
    Offline

    Paulomart

    Registriert seit:
    3. November 2013
    Beiträge:
    148
    Ort:
    C:/Eclipse/Workspace/
    Minecraft:
    Paulomart
    moment, wenn man doch den Spieler von der Liste entfernt, hat die Refferenz doch weg?
     
    #19
  20. ImpactCP
    Offline

    ImpactCP

    Registriert seit:
    21. Oktober 2012
    Beiträge:
    23
    Minecraft:
    ImpactCP
    Oder es bleibt sehr lang im OldGen-Heap liegen ;)
     
    #20