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

2

3

4

5

6

7

8


9

10

11

12

13



14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29



30

31



32



33

34

35

36

37

38


39

40

41

42

43



44



45

46



47

48

49

50

51

52

53

54

55

56

57

58



59



60

61

62

63

64


65

66

67

68

69



70



71



72

73

74

75

76

77


78

79

80

81



82

83

84



85

86

87

88

89

90

91

92

93


94

95

96

97

98



99

100

101



102

103

104

105

106

107

108


109

110

111

112



113



114

115

116

117

118

119


120

121

122

123



124



125

126

127



128

129

130

131

132



133

134

135

136

137


138

139

140

141

142



143

144

145


146

147

148

149



150

151

152



153

154

155

156

157

158

159

160

程序如下:
/Files/ksyou/ChatOnlineDemo.rar
由于使用了json所以还要加一些jar