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();
我正在 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();