我下载了个别人做的聊天程序。发现其他用户登录或退出的时候,其他用户都看不到提示。我想把这个提示加进去。加了半天都没成功。谁能给出相关的代码。随便在那边回答都有分送。两边都答复都送分。
链接如下:
http://community.csdn.net/Expert/topic/4350/4350740.xml?temp=.6657526

解决方案 »

  1.   

    我给你改了一下,论方法还是比较简单的,全部用原来程序里面的东西,没有新的设计观点。主要思路是:
       在服务器端加入两条消息login和logout,当有新用户加入服务器时,发送"LOGIN:"+name给各用户,当有用户退出服务器时,发送“LOGOUT:”+name给各用户,具体实现如下:
    1. 修改服务器端notifyChatRoom函数
        public void notifyChatRoom(String name,boolean login)
        {
            StringBuffer sb = new StringBuffer("PEOPLE");
            for(int i=0;i<array.size();i++)
            {
                Client c =(Client)array.get(i);
                sb.append(":"+c.name);
            }
            sendToClients(sb);
            
            if(name==null)
             return;
            
         sb = new StringBuffer();
            if(login)
             sb.append("LOGIN:"+name);
            else
             sb.append("LOGOUT:"+name);
            sendToClients(sb);   
        }2. 修改服务器端notifyChatRoom()函数的三个调用:
     (在内部类client中的run函数中)
      三处依次改为:  notifyChatRoom(name,true);  //新用户加入
                      notifyChatRoom(name,false); //有用户退出
                      notifyChatRoom(null,false); //只刷新用户,没有加入或退出3. 修改客户端内部类ClientListener类中run()函数的代码:
       在IF...ELSE处加入如下内容:
                    else if(keyword.equals("LOGIN"))//弹出对话框说明新用户加入
                    {
                     while(st.hasMoreTokens())
                     {
                           String user = st.nextToken();
                            if(!user.equals(name))
                             JOptionPane.showMessageDialog(frame,
                                            "用户"+user+"加 入","提示",
                                            JOptionPane.INFORMATION_MESSAGE);          
                     }
                    }
                    else if(keyword.equals("LOGOUT"))
                    {
                     while(st.hasMoreTokens())
                     {
                     String user = st.nextToken();
                            JOptionPane.showMessageDialog(frame,
                                         "用户"+user+"退出","提示",
                            JOptionPane.INFORMATION_MESSAGE);  
                     }
                    }4. 附注:为了调试方便,我把各个用户的“消息窗口”定位在各自的Frame中间
       实现方法: 在ClientServer中加入变量JFrame frame;
                  在其构造函数最后一行加入一句 frame=this;本程序已经调试正确, 请楼主仔细验证。