美好的一天,
我有一个有趣的问题,我无法理解。 我有一个名为“HomeScreenManager”类,它保持一个LinkedList <String>的称为聊天 。 该HomeScreenManager实例所在的服务器上,并负责跟踪的连接和聊天记录的。 然后,我创建一个名为“ProtocolHomeScreen”类,这是与一个LinkedList <字符串>称为聊天类并实现Serializable。 当谈到时间的聊天更新所有的客户,我想发出一个ProtocolHomeScreen。 所以,我创建了ProtocolHomeScreen的一个全新的实例,我说,这是链接字符串列表“得到”主屏幕的链接列表。 因此,换句话说,在不同的类中创建了我想要序列链表,但我指着它与另一个实例。 问题是,该数据不会发送,只有一个空的LinkedList出现在另一边。 我已经做了通过线调试线和检查所有的变量和右边我打电话之前的writeObject一切似乎都很正常,但随后在客户端上,当我收到ProtocolHomeScreen例如,链接列表为空! (它不是空虽然)任何想法? 谢谢!
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);
}
}
}
编辑
这是在客户端代码......注意,玩家的链表遇到就好了,但我认为这事做的事实,我在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);
}
}