我知道这个问题已经在这里被问过无数次了,我已经搜索过SO和其他来源的解决方案,但我无法解决这个错误。我为我的ClientPlayer类属性设置了一个getter和setter,当调用某个按钮时,setter在GUI中调用,并且在客户端连接并将对象发送到服务器后,我想使用getter。调用方法“this.client.sendTCP(clientPlayer.getPlayerName());”在ClientController中返回一个nullPointerException。当我尝试发送到服务器时,为什么我的获得者返回null?
错误:“JavaFX Application Thread”java.lang.IllegalArgumentException:object不能为null。
我的猜测是我创建一个新的ClientPlayer实例太多,因此返回null,因为我的字符串playerName最初设置为none。但是,我不确定如何解决问题。我真的很感谢任何帮助。
public class ClientPlayer implements Serializable {
public ClientPlayer() {
}
private String playerName;
public void setPlayerName(String playerName) {
this.playerName = playerName;
}
public String getPlayerName() {
return this.playerName;
}
}
低于我的GUI代码,我设置一个按钮连接到服务器的相关部分:
ClientPlayer clientPlayer = new ClientPlayer();
clientToGame.setOnAction((ActionEvent w) -> {
clientPlayer.setPlayerName(clientNameText.getText());
clientController.connect();
window.setScene(lobbyScene);
});
这里是我的客户级的位,我试图让命名并发送至服务器:
public class ClientController() {
ClientPlayer clientPlayer = new ClientPlayer();
public void connect() {
if (client.isConnected()) {
Logger.getLogger(getClass().getName()).log(Level.INFO, "You are already connected to :{0}", config.getHost());
return;
}
this.client.start();
try {
this.client.connect(5000, config.getHost(), config.getTCPPort());
System.out.println("Successfully connected to " + config.getHost());
this.client.sendTCP(clientPlayer.getPlayerName());
} catch (IOException ex) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, "Server connection failed: {0}", ex.getMessage());
throw new RuntimeException(ex);
}
MessageRegistry.registerMessages(client.getKryo());
this.client.addListener(listener);
}
}
是'ClientController'类内的'clientToGame.setOnAction ...'? –
只有setter初始化你的'String playerName'并且你的变量'playerName'没有被初始化,所以它返回一个null! –
不,它不是 - 它是GUI类,我从textField获取名称。 –