0

我有一个功能

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();
        }
    }

我第一次调用这个函数时,它从服务器获取数据。然后来自服务器的数据发生变化。我第二次调用这个函数,数据和第一次一样。为什么?

4

2 回答 2

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);
....
于 2012-11-01T16:25:06.127 回答
2

ObjectOutputStream.reset()每次要重新发送具有新值的相同对象时都需要调用,否则使用writeUnshared(). 请参阅 Javadoc。

于 2012-11-01T20:34:21.120 回答