无法从GUI获取客户端名称列表并发送到服务器

时间:2017-01-26 21:21:57

标签: java arraylist server client kryonet

我正在使用kryonet和JAVAFX进行多人/客户端游戏。 我只是在连接到服务器后获取客户端名称时遇到问题。我想到从TextField获取名称,并在单击连接按钮时将其添加到我的ArrayLIst。

问题是,无论何时单击按钮,名称都会添加到列表中,但它是唯一的名称,好像我正在创建一个新列表。我究竟做错了什么?我想将列表传递给服务器和/或为GUI创建一个可观察的列表。有没有更好的方法呢?我只需要一个来自“clientNameText”-TextField的列表。我希望我提供了足够的代码。

提前致谢!

客户端加入时的服务器代码,获取ID工作正常

public class ServerController {

 List<String> clients = new ArrayList();

// this is the method I call in the GUI
  public String addName(String name) {
    clients.add(name);
    return name;
 }
public void connected(Connection connection) {
        if (connection instanceof Connection) {
            clientMap.put(connection.getID(), connection.toString());
            System.out.println("Map: " + clientMap.toString());
            //clients.add("Player " + connection.getID());
            System.out.println(clients);
            //lobby.addPlayer(connection.getID());
            //user.addID(connection.getID());
        }
    }

将GUI类中的按钮设置为action:

    TextField clientNameText = new TextField("Username");
    Button clientToGame = new Button("Connect");
    ArrayList<String> names = new ArrayList<>();

    clientToGame.setOnAction((ActionEvent w) -> {
        clientController.connect();
        // this always adds the last client who joint but the rest are delted
        serverController.addName(clientNameText.getText());
        obsList.addAll(serverController.getClientList());
        window.setScene(lobbyScene);
    }
    );

0 个答案:

没有答案