我正在用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
是公共实例。
但问题是,只要新用户加入服务器,第一个(即最早的)客户端的JList
就会更新,而其他用户则不会收到任何用户在其用户界面中更新JList
。
答案 0 :(得分:1)
在notifyUser方法中,您只是写入数组中第一个用户的输出流,即
i = 0;
应该在
之后递增out.get(i).flush();