2015-04-15 18 views
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。

+1

递增在向notifyUser方法,则只写入数组中的第一个用户的输出流,即'i = 0;'应该在'out.get(i).flush();' –

+0

@cyber_rookie谢谢帮助!这是一个愚蠢的错误 – dheeraj

+0

没问题,只要注册为接受的答案,所以这个问题可以关闭。谢谢。 –

回答

1

在向notifyUser方法,你只写入到阵列中的第一用户的输出流,即

i = 0; 

应该后

out.get(i).flush(); 
相关问题