很简单的一个聊天室程序,每一秒读一次(没办法),对比当前窗口与后台的对话作息数,得到需要返回到当前窗口的对话信息,不必每次都把所有的数据读一次。

自动滚屏,但是当人为滚动滚动条时,会停止自动滚屏。

主要的一个类:

 

 

  1package com.ttszw.action;
  2
  3import java.util.ArrayList;
  4import java.util.HashMap;
  5import java.util.List;
  6import java.util.Map;
  7import java.util.Random;
  8/**
  9 * coding utf-8
 10 * @author chengkai
 11 *
 12 */

 13public class ChatMassage {
 14    
 15    public static ChatMassage chatMassage = null;
 16    //用户
 17    private List<String> users = new ArrayList<String>();
 18    //最大聊天室人数
 19    private final int USER_NUMBER = 50;
 20    //聊天室人数
 21    public static int userNum=0;
 22    //对话信息
 23    private List<String> massages = new ArrayList<String>();
 24    //信息总数目
 25    public static int mass_num=0;
 26    //用户显示的颜色
 27    private Map<String, String> color = new HashMap<String, String>();
 28    
 29    protected ChatMassage(){}
 30    
 31    public static ChatMassage Instance(){
 32        if(chatMassage==null){
 33            return chatMassage = new ChatMassage();
 34        }

 35        return chatMassage;
 36    }

 37    
 38    /**
 39     * 登记用户名
 40     * @param name 用户姓名
 41     * @return boolean 添加是否成功
 42     */

 43    public boolean addUser(String name){
 44        synchronized (users) {
 45            //如果没有此用户,而且聊天室人数未满
 46            if(!this.hasUser(name)&&!isFull()){
 47                users.add(name);
 48                //为当前用户设置显示颜色
 49                String color = createColor();
 50                this.color.put(name, color);
 51                userNum++;
 52                return true;
 53            }

 54        }

 55        return false;
 56    }

 57    
 58    public boolean isFull(){
 59        if(userNum<this.USER_NUMBER){
 60            return false;
 61        }

 62        return true;
 63    }

 64    /**
 65     * 查看此用户名是否被使用
 66     * @param name 用户姓名
 67     * @return boolean 是否存在
 68     */

 69    public boolean hasUser(String name){
 70        for(String na:users){
 71            if(name.equalsIgnoreCase(na)){
 72                return true;
 73            }

 74        }

 75        return false;
 76    }

 77    /**
 78     * 得到用户列表
 79     * @return
 80     */

 81    public String getUsers(){
 82        StringBuffer user = new StringBuffer();
 83        int i=0;
 84        while(i<userNum){
 85            String name = this.users.get(i);
 86            String color = this.getColor(name);
 87            String userMass = "<font color='"+color+"'>"+name+"</font><br>";
 88            user.append(userMass);
 89            i++;
 90        }

 91        return user.toString();
 92    }

 93    /**
 94     * 返回信息
 95     * @param i 前台中存有的对话信息数
 96     * @return
 97     */

 98    public String getMassage(int i){
 99        StringBuffer massage = new StringBuffer();
100        //只有在前台对话信息数小于后台信息总数时才返回
101        while(i<mass_num&&i>=0){
102            massage.append(massages.get(i));
103            i++;
104        }

105        return massage.toString();
106    }

107    
108    /**
109     * 添加对话信息
110     * @param massage 信息内容
111     */

112    public void setMassage(String massage){
113        synchronized (massages) {
114            massages.add(massage);
115            mass_num++;
116        }

117    }

118    
119    /**
120     * 退出聊天室
121     * @param name 退出人的姓名
122     */

123    public void exit(String name){
124        if(users.remove(name)){
125            userNum--;
126            //如果聊天室没有人了,则始化信息
127            if(userNum==0){
128                mass_num=0;
129                massages.clear();
130                users.clear();
131                color.clear();
132            }
else{
133                color.remove(name);
134            }

135        }
;
136    }

137    /**
138     * 根据用户名得到当前用户的颜色
139     * @param username
140     * @return
141     */

142    public String getColor(String username) {
143        return color.get(username);
144    }

145    /**
146     * 随机创建颜色
147     * @return
148     */

149    private String createColor(){
150        StringBuffer color=new StringBuffer("#");
151        Random random = new Random();
152        for(int i=0;i<3;i++){
153            int a = random.nextInt(256);
154            //转换成十六进制
155            color.append(Integer.toHexString(a));
156        }

157        return color.toString();
158    }

159    
160}

 程序如下:

/Files/ksyou/ChatOnlineDemo.rar

由于使用了json所以还要加一些jar

/Files/ksyou/allJarOfJson.rar

 posted on 2009-04-30 18:50  将军  阅读(3263)  评论(1编辑  收藏  举报