我正在使用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);
}
);