UI 中的 JList 未反映所有对等进程的更改

JList in UI not reflecting changes from all peer processes

我正在 Java 中编写一个简单的聊天应用程序。一旦有新用户加入,我的应用程序的服务器组件就应该将此事件通知所有其他客户端。

服务器端相关代码如下:

private void notifyUser() throws IOException {
    String[] user = new String[onlineUsers.size()];
    int i = 0;
    for(Socket sock : sockets){
        out.get(i).writeInt(1);
        out.get(i).writeObject(onlineUsers.toArray(user));
        out.get(i).flush();
    }
}

客户端线程正在使用以下代码侦听套接字:

ObjectInputStream in = new ObjectInputStream(sockfd.getInputStream());
while(true) {
    command = in.readInt();
    switch(command) {
        case 1:
            String[] user = (String[])in.readObject();
            System.out.println(user);
            client.addOnlineUsers(user);
    }
}

addOnlineUsers(..)方法由以下代码组成:

public void addOnlineUsers(String[] user) {
    for(String s : user){
        listmodel.addElement(s);
    }
}

我已经像这样实例化了 JList:

JList list = new JList(listmodel);

,其中 listmodel 是一个 public 实例。

但是,问题是,一旦新用户加入服务器,第一个(即最旧的)客户端的 JList 就会更新,而其余用户不会收到任何消息UI.

中的 JList 更新

在 notifyUser 方法中,您只写入数组中第一个用户的输出流,即

i = 0; 

应该在

之后递增
out.get(i).flush();