0
我正在用Java编写简单的聊天应用程序。一旦新用户加入,我的应用程序的服务器组件应该通知所有其他客户端此事件。UI中的JList不反映来自所有同级进程的更改
在服务器端相关的代码如下:
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(..)
方法包括以下代码的:
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();
}
}
客户端线程在插座上使用以下代码听:
public void addOnlineUsers(String[] user) {
for(String s : user){
listmodel.addElement(s);
}
}
我已经实例化JList如s o:
JList list = new JList(listmodel);
,其中listmodel
是一个公共实例。
然而问题是,一旦有新用户加入服务器,第一个(即最老的)客户端的JList
就会更新,而其余用户不会收到任何对于JList
的更新他们的UI。
递增在向notifyUser方法,则只写入数组中的第一个用户的输出流,即'i = 0;'应该在'out.get(i).flush();' –
@cyber_rookie谢谢帮助!这是一个愚蠢的错误 – dheeraj
没问题,只要注册为接受的答案,所以这个问题可以关闭。谢谢。 –