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

主要的一个类:
1
package com.ttszw.action;
2
3
import java.util.ArrayList;
4
import java.util.HashMap;
5
import java.util.List;
6
import java.util.Map;
7
import java.util.Random;
8
/**
9
* coding utf-8
10
* @author chengkai
11
*
12
*/
13
public 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
}
package com.ttszw.action;2

3
import java.util.ArrayList;4
import java.util.HashMap;5
import java.util.List;6
import java.util.Map;7
import java.util.Random;8
/**9
* coding utf-810
* @author chengkai11
*12
*/13
public 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
* @return80
*/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
* @return97
*/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 username140
* @return141
*/142
public String getColor(String username) {143
return color.get(username);144
}145
/**146
* 随机创建颜色147
* @return148
*/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


posted on
浙公网安备 33010602011771号