Object-Array Zugriffsfehler beheben

Phantom369

Grünschnabel
Hallo erstmal ich programmier seit einigen Tagen an einem kleinen Chat, jedoch bin auf das Problem gestoßen das sich das das User-Object-Array beim verteilen der nachricht immer die nachrichten aller nutzer verbindet und beim leeren alle nachrichten der nutzer löscht.
Hier ist das User_Object:
Code:
package Server.Con;

public class User {
    public static String name;
    private static String msg;
    public static int id;
  
    public User(String n,int i){
        name = n;
        id = i;
        msg = new String("");
    }
    public void set_msg(String s){
        msg = s;
    }
    public String get_msg(){
        return msg;
    }
    public boolean msg_empty(){
        return msg.isEmpty();
    }
}
und der Zugriff auf das Object erfolgt hier:
Code:
        if(w_status == 2){            //Nachrichten abfrage
            int z = 0;                //Zähler
            while(z < id){            //wenn zähler kleiner als nutzerzahl ist:
                if(!users[z].msg_empty()){
                users[z].set_msg(users[z].get_msg() + "\n"+msg_e[1]);
                }
                if(users[z].msg_empty()){
                users[z].set_msg(msg_e[1]);
                }
                System.out.println("/"+users[z].get_msg() +"/");
                System.out.println(z);
                z++;
            }
            out.println(Commands.cm[5]);
        }
Danke im voraus
 

ComFreek

Mod | @comfreek
Moderator
Das Problem liegt in deiner User-Klasse:
Java:
public class User {
  public static String name;
  private static String msg;
  ...
Dort deklarierst du name und msg als statische Variablen ("static"). Beachte, dass das Wort "statisch" mehrere Bedeutungen u. a. abhängig von der verwendeten Programmiersprache haben kann. Hier bedeutet eine statische Variable, dass sie klassenspezifisch ist, nicht instanzspezifisch. name und msg gibt es einmal und das für alle User-Objekte. Sie sind sozusagen mit der Klasse User verbunden und nicht mit einzelnen Instanzen dieser Klasse. Deswegen verwenden deine drei Methoden (abgesehen vom Konstruktor) immer die statischen Variablen und überschreiben demnach die Werte für alle Nutzer.
Die Lösung ist ganz einfach: Entferne das Schlüsselwort "static".