美好的一天,Java引用對象的序列化是「失去價值」?
我有一個有趣的問題,我不明白。我有一個名爲「HomeScreenManager」的類,它維護一個LinkedList <字符串>調用聊天。 HomeScreenManager實例駐留在服務器上,負責跟蹤連接和聊天記錄。然後我創建了一個名爲「ProtocolHomeScreen」的類,它是一個類LinkedList <字符串>調用聊天並實現Serializable。當需要通過聊天更新所有客戶端時,我想發送ProtocolHomeScreen。所以我創建了一個全新的ProtocolHomeScreen實例,我說它是鏈接的字符串列表「獲取」HomeScreen的鏈接列表。換句話說,我想要序列化的鏈表是在不同的類中創建的,但我用另一個實例指向它。問題是數據沒有被髮送,只有一個空的LinkedList出現在另一邊。我一行一行地完成了調試器並檢查了所有的變量,在我調用writeObject之前,一切看起來都很好,但是在客戶端,當我收到ProtocolHomeScreen實例時,鏈表是空的! (它不是null)任何想法?謝謝!
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);
}
}
您的讀/寫代碼是什麼樣的? *是通過另一方來代替您期望的數據? –