我创建了一个服务器-客户端聊天室样式的应用程序,并且正在尝试传输我创建的自定义对象,该对象包含消息和使用客户端/服务器应用程序的人员的用户名。为此,我创建了一个名为 message
的单独类,其中包含两个静态变量,一个名为 username
,另一个名为 messageText
:
public class message implements Serializable{
static String username = "";
static String messageText = "";
public message(String message, String user){
System.out.println("Setting username and messageText");
username = user;
messageText = message;
}
public message(Object recievedObject){
username = ((message) recievedObject).getUsername();
messageText = ((message) recievedObject).getMessageText();
}
}
我将此类的对象从服务器发送到客户端,如下所示:
message sendMessage = new message(enteredText, "SERVER");
output.writeObject(sendMessage);
客户接受如下:
message recievedMessage = (message) input.readObject();
cw.say(recievedMessage.getMessageText(), recievedMessage.getUsername());
但是,上面的 getMessageText() 和 getUsername() 方法都将返回接收端初始化变量的任何内容,并在发送端返回正确的值.
几个小时的尝试解决这个问题没有提供任何解决方案,所以非常非常感谢你们能给我的任何帮助!谢谢。
最佳答案
静态字段未序列化。如果你让它们成为非静态的,它应该可以工作
关于java - 当使用 ObjectOutputStream/ObjectInputStream 传输自定义对象时,变量将被重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20861696/