【发布时间】:2012-05-19 13:57:28
【问题描述】:
早安,
我遇到了一个我无法理解的有趣问题。我有一个名为“HomeScreenManager”的类,它维护一个名为 chat 的 LinkedList
public class HomeScreenManager implements ObjectMessageHandler, Serializable
{
protected LinkedList<User> users;
protected LinkedList<String> chat;
protected LinkedList<String> sessions;
public HomeScreenManager()
{
chat = new LinkedList<String>();
users = new LinkedList<User>();
sessions = new LinkedList<String>();
}
protected void handleChat(String message)
{
chat.add(message);
ProtocolHomeScreen p = new ProtocolHomeScreen(this);
for(User u:users)
{
u.connection.WriteObject(p); //At this point in time, p has the correct data, but when I deserialize p, the chat list is empty...
}
}
那么这里是协议类...
public class ProtocolHomeScreen implements Serializable
{
public LinkedList<String> chat;
public LinkedList<String> players;
public LinkedList<String> sessions;
public ProtocolHomeScreen(HomeScreenManager hms)
{
players = new LinkedList<String>();
for(User u:hms.getUsers())
{
players.add(u.getUsername());
}
sessions = hms.getSessions();
chat = hms.getChat();
chat = new LinkedList<String>();
for(String s: hms.getChat())
{
chat.add(s);
}
}
}
编辑
这是客户端的代码......请注意,播放器的 LinkedList 很好,但我认为这与我在 ProtocolHomeScreen 的构造函数中创建了一个新实例(在服务器端)
else if(obj instanceof ProtocolHomeScreen)
{
ProtocolHomeScreen phs = (ProtocolHomeScreen) obj;
sessionModel.removeAllElements();
playersModel.removeAllElements();
chatOutput.setText("");
for(String s:phs.players)
playersModel.addElement(s);
for(String s:phs.sessions)
sessionModel.addElement(s);
for(String s:phs.chat)
{
chatOutput.setText(chatOutput.getText()+s);
}
}
【问题讨论】:
-
你的读/写代码是什么样的?另一端是什么,而不是您期望的数据?
标签: java serialization object-graph