我有一个功能
public void loadUserOnline() {
try {
oos.writeObject(req); //Send request to Server to get online users
oos.flush();
LinkedList<UserOnlineInfo> userOnlineInfoList = (LinkedList<UserOnlineInfo>)ois.readObject(); // read object from Server contains online users
Vector<String> listData = new Vector<>(); // a Vector for JList
for (int i = 0; i < userOnlineInfoList.size(); i++) {
listData.add(userOnlineInfoList.get(i).getUser() + " --- " + userOnlineInfoList.get(i).getStatus()); // add elements to Vector
}
theList.setListData(listData); // set data source for JList
}
catch (Exception e){
e.printStackTrace();
}
}
我第一次调用此函数时,它从服务器获取数据。然后服务器的数据发生变化。我第二次调用此函数,数据与第一次相同。为什么呢?
答案 0 :(得分:2)
您正在使用相同的ObjectOutputStream实例oos
,该实例在第一次调用此方法时已用尽。如果再次初始化ObjectOutputStream,那么您将获得一个新流:
public void loadUserOnline() {
// initialise oos here or before the call to this method
ObjectOutputStream oos = new ObjectOutputStream(......
try {
oos.writeObject(req);
....
答案 1 :(得分:2)
每次要使用新值重新发送同一个对象时,都需要调用ObjectOutputStream.reset()
,否则请使用writeUnshared()
。见Javadoc。