很简单的一个聊天室程序,每一秒读一次(没办法),对比当前窗口与后台的对话作息数,得到需要返回到当前窗口的对话信息,不必每次都把所有的数据读一次。
自动滚屏,但是当人为滚动滚动条时,会停止自动滚屏。
主要的一个类:
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}
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