java即时通讯系统QQ设计及源码下载地址

合集下载

基于J2EE S2SH架构的仿腾讯QQ的即时通讯系统项目——详细设计说明书(第1部分)

基于J2EE S2SH架构的仿腾讯QQ的即时通讯系统项目——详细设计说明书(第1部分)
如果用户连续 5 次使用同一个 IP 登录,软件将不要求用户在登录时输入验证码。 2)用户注册
Input
昵称 性别
生日
密码
邮箱地址
手机号
验证码
Processing Output
检验用户输入信息是否合法,若是,创建新用户记 录,将用户信息写入数据库,为用户分配 ID 号,并 将 ID 号返回给用户。 注册成共,获取 ID 号或注册失败。
1922processing根据用户选择的好友在数据库中删除聊天记录output删除好友聊天记录成功或失败3刷新聊天记录input选择要刷新的好友名字processing根据用户选择的好友在数据库中刷新聊天记录output刷新好友聊天记录成功或失败4回复信息input选择要回复的好友processing根据用户选择的好友在数据库中回复聊天记录output回复好友聊天记录成功或失败5导入聊天记录input选择要导入的好友聊天记录processing在数据库中导入好友的聊天记录output导入好友聊天记录成功或失败6导出聊天记录input选择要导出的好友聊天记录processing在数据库中导出好友的聊天记录output导出好友聊天记录成功或失败5相关接口模块名称消息管理模块子模块接收消息模块
就读取上一次传送时候保存的文件传输进度,并将该进度(已发送字节数)和整个
文件传输给服务器,当接收方上线时,服务器将进度发送给接收方,接收方据此设
置文件指针,并继续进行传输(提出问题:如果是发送方掉线的情况下应该如何处
理?)。如果 A 在第 10 次传输时发现 B 掉线(很可能 B 是在传输了 2KB 的时候掉线),
杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料
基于 J2EE S2SH 架构的仿腾讯 QQ 的即时通讯系统项目——详细设计说明 书(第 1 部分)

基于J2EE S2SH架构的仿腾讯QQ的即时通讯系统项目——需求规格说明书

基于J2EE S2SH架构的仿腾讯QQ的即时通讯系统项目——需求规格说明书

基于J2EE S2SH架构的仿腾讯QQ的即时通讯系统项目——需求规格说明书1.1.1引言1、项目背景待开发的软件系统为蓝梦教育集团即时通讯系统。

本项目的提出者为蓝梦教育集团高层管理部及系统开发部,开发者为蓝梦教育集团系统开发部,用户为蓝梦教育集团所有员工。

利用企业即时通讯(Instant Messenger,简称IM系统)可以建立一个以自身公司为核心的即时通讯平台,创造新型办公沟通模式,提升办公效率,降低企业通信费用,增强企业内部沟通能力,改善企业与客户之间的沟通渠道——因为公司工作效率很大程度上取决于信息在公司内部流通的速度,以及工作人员彼此之间的熟悉默契程度。

用户可以IM帐号登录,提供即时通讯等方面的功能。

同时该系统的使用可以避免员工使用其他即时通讯系统带来的工作中分散注意力的不良现象。

2、编写目的本软件说明书的目的是挖掘出这个即时通讯系统的全部的需求包括功能上的与非功能的,并对其进行详细的描述。

提供了UML用例图以及详细的用例描述。

需求分析为下一步的软件设计打下基础,也为将来的代码实现提供依据,并且要让项目成员组中的每一个成员知道我们到底要完成的是一个什么样的系统。

这样在以后的步骤中成员之间可以更好的协同高质量的完成任务,本文档的编写为项目开发人员下阶段的设计、开发提供依据,为项目组成员对需求的详尽理解,以及开发过程中协同、高质、高效的工作提供强有力的保证。

此需求说明书也会成为项目验收的依据之一。

3、预期读者本需求说明书面向的读者主要是本项目的全部成员,以及验收人员,将来还会面对系统的维护与升级人员。

4、定义(1)IM企业即时通讯(Instant Messenger),简称IM系统。

(2)客户项目投资方,在此为蓝梦教育集团。

(3)用户产品的最终使用者,在此为蓝梦教育集团的员工。

(4)UIUser Interface 用户界面。

(5)B/SBrowser/Server 浏览器/服务器。

5、参考资料(1)J2EE项目实训Hibernate框架技术(21世纪高等学校实用软件工程教育规划教材)杨少波编著清华大学出版社 2008 年5月(2)J2EE项目实训Spring框架技术(21世纪高等学校实用软件工程教育规划教材)杨少波编著清华大学出版社 2008 年5月(3)J2EE项目实训UML及设计模式(21世纪高等学校实用软件工程教育规划教材)杨少波编著清华大学出版社 2008 年5月(4)J2EE项目实训Struts框架技术(21世纪高等学校实用软件工程教育规划教材)杨少波编著清华大学出版社2008 年10月(5)《精通Struts设计与开发》作者:孙卫琴电子工业出版社(6)《Spring从入门到精通》作者:郭锋清华大学出版社(7)《Hibernate开发技术祥解》作者:孙卫琴电子工业出版社(8)《J2EE应用开发技术祥解》作者:刘晓华电子工业出版社(9)《设计模式》作者:Erich Gamma等机械工业出版社1.1.2任务概述1、目标某国际化的著名教育企业蓝梦教育集团(Blue Dream Group),为了能够在中国迅速地开展与教育产品和IT技能培训有关的各个方面的业务、并期望能够取得比较好的效益和提高各项教育产品的质量以迎接新的挑战,需要全面地提升本土化的信息化项目建设的进度。

基于J2EE S2SH架构的仿腾讯QQ的即时通讯系统项目——详细设计说明书(第3部分)

基于J2EE S2SH架构的仿腾讯QQ的即时通讯系统项目——详细设计说明书(第3部分)

基于J2EE S2SH架构的仿腾讯QQ的即时通讯系统项目——详细设计说明书(第3部分)1.1.1用户界面设计规范1、设计说明本文档主要针对即时通讯系统的用户界面设计风格标准进行描述,从而为客户提供界面设计参考。

2、概念和定义(1)用户界面即人机界面,实现用户与计算机信息交换的软件与硬件部分,主要表现为用户与计算机之间的通信,以控制计算机或进行用户和计算机之间的数据传送的系统部件。

(2)GUI(Graphical User Interface)即图形用户界面,又称为图形用户界面接口,一种可视化的用户界面,它使用图形界面代替正文界面显示计算机操作用户界面,以实现更为轻松的人机互动。

3、用户群体假定使用本系统的用户定义为:对计算机与浏览器的基本用法有一定了解,希望系统界面设计能够实现一般即时通讯系统的功能,并且体现公司特色、符合公司形象,便于公司员工之间的交流,提高工作效率,对实时性、易用性、简洁性、安全性有较高的要求的用户。

4、用户界面设计原则(1)即时通讯系统坚持图形用户界面(GUI)设计原则界面直观、清晰,对用户透明化(即用户接触系统时不需要进行进一步的培训,就可以对系统的功能一目了然,进行所需操作)(2)即时通讯系统采用简约的设计风格便于用户识别,易于用户操作。

界面风格以干净、简洁为主,更适于人机交互。

(3)即时通讯系统各个功能界面坚持风格统一简洁干净,充分考虑用户的各种需求,利于提高公司效率,并保证了一定的信息安全性。

(4)界面一致性在界面设计中应该保持界面的一致性。

一致性既包括程序内部一致性,即为使用统一的界面元素、标准的控件,也包括使用相同的信息表现方法,如在字体、标签风格、颜色、术语、显示错误信息等方面确保一致;保持与约定俗成的习惯保持一致性,遵循界面规范。

从而确保界面整体风格以及细节风格具有一致性、整体感。

(5)显示信息一致性标准1)标签提示:字体为加重、楷体、黑色、蓝底或透明、无边框、居中、带冒号、一般情况为12px;2)日期:正常字体、宋体、白底黑字、3-D lowered;3)对齐方法:●居中:一般文字、单个数字、等。

基于J2EE S2SH架构的仿腾讯QQ的即时通讯系统项目——详细设计说明书(第2部分)

基于J2EE S2SH架构的仿腾讯QQ的即时通讯系统项目——详细设计说明书(第2部分)

基于J2EE S2SH架构的仿腾讯QQ的即时通讯系统项目——详细设计说明书(第2部分)6、邮件管理模块设计说明(1)程序功能描述设计目的:提醒用户有新邮件到达,并且用户可以接受和发送邮件。

(2)功能模块(3)系统性能1)搜索查询时间:最大不超过5秒。

2)页面平均处理及响应时间:1—3秒以内,最大不超过5秒。

3)页面平均更新响应时间:2秒左右,最大不超过3秒。

(4)输入- 处理–输出(IPO)流程1)被提醒有新邮件InputProcessing 服务器提醒用户有新邮件到达Output 显示新邮件提示框成功或失败2)接受邮件InputProcessing 服务器将邮件下载到本地机上Output 接受邮件成功或失败3)发送邮件Input 要接受此邮件的好友邮箱Processing 服务器将邮件发送到对方所在的服务器上Output 显示邮件发送成功或失败(5)接口(6)流程逻辑1)被提醒有新邮件2)接受邮件3)发送邮件(7)注释设计1)各模块及子模块首部应有本模块的功能说明;2)各功能函数的函数声明处应有参数含义、参数来源的说明;3)各功能函数内的变量声明处应有该变量的功能、范围、缺省条件等说明;4)各功能函数的函数体首应有该函数的处理逻辑的说明;5)各功能函数的函数体内关键语句处应有说明;(8)测试计划详见测试文档(9)尚未解决的问题暂无。

7、界面管理设计说明(1)程序功能描述设计目的:用户可以根据自己的习惯和喜好选择适合自己的界面,并且可以根据需要搜索好友,或者相关网页内容。

(2)功能模块(3)系统性能1)传输时间:精确到秒。

2)事务页面平均处理及响应时间:1—3秒以内,最大不超过5秒。

(4)输入–处理–输出(IPO)流程1)面板设置InputProcessing 根据用户的选择,对侧边栏、个人信息及快速启动栏中相应的配置文件进行修改,添加或者删除相应的项,在用户点击【应用】后重绘界面,并把修改后的信息保存。

java版qq 有图有源码~~~~~~~~~~

java版qq 有图有源码~~~~~~~~~~

java版qq 有图有源码~~~~~~~~~~ 阅读次数: 1144次发布时间: 2010-03-22 13:23:53发布人: 网络转载来源: 网络转载无图无真相,先上图。

客户端:登录:注册:好友:聊天窗口:基本资料:主界面:托盘:菜单:下载源代码:svn checkout /svn/bicq/ BICQ 文档:源代码下的doc目录java版本:jdk1.4.0服务器端安装与启动:1. 安装数据库找一台mysql数据库,创建数据库bicq, latin1字符集,然后创建一个用户对此数据库有权限,如root/root。

导入工程目录下的doc/bicq.sql创建表。

2. 配置数据库在工程的conf/server-config.ini修改数据库连接。

默认的为localhost机器上bicq数据库,用户root/root。

3. 启动运行mm.smy.bicq.server.StartServer的main函数。

客户端安装与启动:1. 配置服务器地址:修改工程目录下的server.ini文件,修改服务器地址和端口。

默认是本机的7152端口。

2. 启动客户端:运行mm.smy.bicq.BICQ 的main函数。

3. 一台机器启动多个客户端:每次启动时,修改mm.smy.bicq.BICQ第36,37行的消息监听和发送端口,在运行main函数。

4. 运行时携带托盘程序修改mm.smy.bicq.MainFrame 的第64行,修改withtray = true即可。

注意:一旦携带小图标,一台机器只能启动1个。

因为小图标时JDI做的,有bug,启动不了多个。

如果您感兴趣想改成JDK6自带的托盘,修改mm.smy.bicq.WindowTray,把com.jeans包的东西全部去掉就可以了。

声明:1. 版权Apache2.0,随便处理。

诚实守信的说:2. 这是学java那回写的东西了,时代久远。

很庆幸转入Eclipse工程后还能跑起来。

课程设计实训项目《蓝梦教育集团即时通讯系统》(仿腾讯QQ)——构建出客户端项目和共用功能类(第1部分)

课程设计实训项目《蓝梦教育集团即时通讯系统》(仿腾讯QQ)——构建出客户端项目和共用功能类(第1部分)

J2EE课程设计实训教学示例项目《蓝梦教育集团即时通讯系统》(仿腾讯QQ)——构建出客户端项目和共用功能类(第1部分)1.1.1构建出客户端项目和引用第三方系统库文件1、构建出客户端项目SwingGUIIMApp——添加一个Java应用程序项目,项目名称为SwingGUIIMApp2、引用第三方系统库文件(1)引用服务器端的JDIC等系统库文件jdic.jar和jdic_stub.jar包文件(2)引用服务器端的Apache Common HttpClient等系统库文件commons-httpclient-3.1和commons-codec-1.3包文件(3)引用服务器端的Apache Validate等系统库文件commons-validator.jar和jakarta-oro.jar 包文件(4)引用服务器端的利用JDom技术实现的XML解析的系统库文件jdom.jar包文件(5)引用服务器端的利用Common 日志记录处理的功能实现的系统库文件commons-logging.jar包文件1.1.2构建出客户端项目中的共用功能类1、在该项目中添加一个名称为IMSystemException的自定义异常类(1)包名称为com.px1987.imsystem.client.exception,并且从ng.Exception继承(2)代码如下package com.px1987.imsystem.client.exception; public class IMSystemException extends Exception { private static final long serialVersionUID = 1L;public IMSystemException() {}public IMSystemException(String message) {super(message);}public IMSystemException(Throwable cause) {super(cause);}public IMSystemException(String message, Throwable cause) {super(message, cause);}}2、在项目中新建一个存放图像文件的目录images和拷贝图像文件(1)新建一个存放图像文件的目录images(2)然后将客户端程序中所需要的各个图像文件拷贝到对应的文件目录中,最后为下面的状态。

课程设计项目《蓝梦教育集团即时通讯系统》(仿腾讯QQ)——构建出客户端系统中的各个自定义的组件类程序

课程设计项目《蓝梦教育集团即时通讯系统》(仿腾讯QQ)——构建出客户端系统中的各个自定义的组件类程序
int horizontalAlignment) { super(text, icon, horizontalAlignment); initThisSelfDefineLabel(); } public SelfDefineJLabel_SetupFont(String text, int horizontalAlignment) { super(text, horizontalAlignment); initThisSelfDefineLabel(); } public SelfDefineJLabel_SetupFont(String text) { super(text); initThisSelfDefineLabel(); } public SelfDefineJLabel_SetupFont(String text,String userRegisterIMCode) { super(text); erRegisterIMCode=userRegisterIMCode; initThisSelfDefineLabel(); } public SelfDefineJLabel_SetupFont(Icon image, int horizontalAlignment) { super(image, horizontalAlignment); initThisSelfDefineLabel(); } public SelfDefineJLabel_SetupFont(Icon image) { super(image); initThisSelfDefineLabel(); } public SelfDefineJLabel_SetupFont() { super(); initThisSelfDefineLabel(); } /*

课程设计任务书--即时聊天系统

课程设计任务书--即时聊天系统

《JAVA程序设计》课程设计任务书--即时聊天系统一、课程设计任务与目的本课程设计要求学生对《即时聊天系统》进行分析、设计及编程实现。

要求该系统实现服务器端和客户端功能,可以在企业内部网络和互联网上运行。

可以和好友进行交流,信息即时发送,即时回复,传输文件等功能。

界面友好。

本课程设计对课程设计项目已经作了较为详细的分析及相关知识讲解,通过课程设计,促使学生专业技能得到综合训练,让学生了解软件开发基本技术和工作过程。

同时,本课程设计中将会让学生了解JAVA程序设计中一些高级技术。

通过本系统的开发,同学门要了解软件开发的整个过程,掌握软件开发的基本方法,提前培养同学们从事软件行业应具备的基本素质和能力,为以后的学习作一个铺垫。

二、系统开发步骤软件开发一般有以下步骤:1. 问题定义2. 可行性研究3. 需求分析4. 总体设计5. 详细设计6. 编码及单元测试7. 综合测试8. 软件维护其中1、2、3步可以整合为调研分析阶段,4、5、6、7步可以整合为项目实施阶段。

根据本次课程设计的实际情况,我们着重进行系统设计和编码实施。

该阶段主要工作有:1.系统结构的总体设计决定系统的总体结构,包括整个系统分哪些部分,各部分之间有什么联系以及已确定的需求对这些组成部分如何分配等方面。

2.数据结构定义定义软件处理的对象——类,定义数据处理流程。

3.详细设计对各功能模块的功能定义,说明模块之间的调用关系与接口(参数)。

4.编码及调试根据详细设计的要求,按照统一的要求和编码规范,用JAVA语言编码实现,同时负责每个模块的独立调试。

5.综合测试软件开发的后期是软件装配和综合测试。

软件测试一般有专业的测试人员,同时通过发布使用试用版(体验版)等方式让用户体验、测试。

在多次测试改进后,才正式发布。

三、系统功能需求描述1.客户端注册新用户功能。

2.客户登录功能。

3.添加/删除好友功能。

4.消息收发功能。

5.好友上下线提示。

6.用户基本信息管理。

java课程设计--聊天软件(带源码)(可编辑修改word版)

java课程设计--聊天软件(带源码)(可编辑修改word版)

5. 实验方法与步骤:这个软件从0.1 到1.3 一共13 个版本。

0.1 到0.4 版本为客户端界面设计,第0.5 到1.2 版本为服务器端设计以及客户端与服务器端通信连接的设计实现。

1.3 版为完善之前版本的缺陷并添加登陆界面。

最终版本1.3 版中一共三个类(如图一所示)源代码如下://客户端import java.awt.*;import java.awt.event.*;import java.io.IOException;import .*;import java.io.*;public class ChatClient extends Frame{ Socket s = null;DataOutputStream dos = null;DataInputStream dis = null;private boolean bConnected = false;private static final long serialVersionUID = 1L;TextField tfTxt = new TextField();TextArea taContent = new TextArea();public static void main(String[] args) {// TODO Auto-generated method stubnew Login();}public void launchFrame(){ setLocation(400, 300);this.setSize(300, 300);add(tfTxt, BorderLayout.SOUTH);add(taContent, BorderLayout.NORTH);pack();this.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e){ disconnect();System.exit(0);}});tfTxt.addActionListener(new TFListener());setVisible(true);connect();new Thread(new RecvThead()).start();}public void connect() {try {s = new Socket("127.0.0.1", 8888);dos = new DataOutputStream(s.getOutputStream());dis = new DataInputStream(s.getInputStream());System.out.print("lian jie shang le ");bConnected = true;} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public void disconnect() {try {public void run() {try {while (bConnected){ String str;str = dis.readUTF();taContent.setText(taContent.getText()+str+'\n');System.out.print(str);}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}//服务器端import java.io.DataInputStream;import java.io.EOFException;import java.io.IOException;import java.io.*;import .*;import java.util.*;public class ChatServer{ boolean started =false; ServerSocket ss =null;List<Client>clients=new ArrayList<Client>();public static void main(String[] args) {// Socket s=null;// DataInputStream dis =null;new ChatServer().start();}public void start(){ try {ss = new ServerSocket(8888);started = true;} catch (BindException e){ System.out.print("端口使用中!\n");System.out.print("请关闭相关程序重新运行程序!\n");System.exit(0);} catch (IOException e){ e.printStackTrace();}try {while (started) {// oolean bConnected=false;// s=ss.accept();Socket s = ss.accept();Client c = new Client(s);System.out.print("已连接!\n");new Thread(c).start();clients.add(c);}// dis.close();} catch (IOException e){ e.printStackTrace();} finally{ try {ss.close();} catch (IOException e1){ e1.printStackTrace();}}}class Client implements Runnable{ private Socket s;private DataInputStream dis = null;private DataOutputStream dos=null;private boolean bConnected = false;public Client(Socket s){ this.s = s;try {dis = new DataInputStream(s.getInputStream());dos =new DataOutputStream(s.getOutputStream());bConnected = true;} catch (IOException e){ e.printStackTrace();}}public void send(Stringstr){ try {dos.writeUTF(str);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public void run(){ try {while (bConnected) {String str = dis.readUTF();System.out.print(str + "\n");for (inti=0;i<clients.size();i++){ Client c=clients.get(i);c.send(str);}}} catch (EOFException e){ System.out.print("客户端断开连接!\n");} catch (IOException e) {e.printStackTrace();} finally{ try {dis.close();btnLogin.addActionListener(this);btnExit.addActionListener(this);// P.setBounds(0,0,315,120);// pnlLogin.add(P);pnlLogin.setBackground(Color.WHITE);lblUserName.setBounds(10,125,90,25);txtUserName.setBounds(120,125,180,25);lblPassword.setBounds(10,155,90,25);pwdPassword.setBounds(120,155,180,25);btnLogin.setBounds(20,185,80,25);btnExit.setBounds(220,185,80,25);lblUserName.setForeground(Color.BLACK);lblUserName.setBackground(Color.WHITE);lblPassword.setForeground(Color.BLACK);lblPassword.setBackground(Color.WHITE);pnlLogin.add(lblUserName);pnlLogin.add(txtUserName);pnlLogin.add(lblPassword);pnlLogin.add(pwdPassword);pnlLogin.add(btnLogin);pnlLogin.add(btnExit);setResizable(false);setSize(315,245);setVisible(true);dsSize=toolkit.getScreenSize();setLocation(dsSize.width/2-this.getWidth()/2,dsSize.height/2- this.getHeight()/2);}@Overridepublic void actionPerformed(ActionEvent ae){if(ae.getSource()==btnLogin){String jusername =txtUserName.getText().trim();char[] s = pwdPassword.getPassword();String jpassword = new String(s);if (jusername.equals("") || jpassword.equals(""))}登陆失败登陆成功多个客户端登陆聊天,一个发起聊天在线的全部能收到6.实验总结:这个实验的主要技术是 包中的是socket 使用。

J2EE课程设计实训教学示例项目《蓝梦教育集团即时通讯系统》(仿腾讯QQ)

J2EE课程设计实训教学示例项目《蓝梦教育集团即时通讯系统》(仿腾讯QQ)

J2EE课程设计实训教学示例项目《蓝梦教育集团即时通讯系统》(仿腾讯QQ)1、即时通讯项目介绍,(1)即时通讯系统是一种集声音、文字、图像的低成本高效率的综合型的“通讯平台”即时通讯(IM系统,Instant Messaging)正以其实时性、跨平台性、低成本和高效性,逐渐改变人们在学习和工作中的沟通与交流的方式。

(2)即时通讯工具的种类1)个人即时通讯:满足人们交友、聊天、通讯和娱乐等需求,如腾讯QQ,UC朗玛,网易泡泡,IMU等。

2)企业即时通讯:满足企业日常办公交流的需要而开发,如微软的MSN、腾讯RTX、TM和雅虎通等。

3)商务即时通讯:为了满足某个商务活动和交易的需要而开发,如淘宝的旺旺、阿里巴巴的“贸易通”。

电子商务IM软件与大众IM软件最大的不同在于商机搜索和商机精准匹配上。

4)特殊即时通讯:满足特殊人群的需要或具有特殊功能的需要而开发的。

(3)企业即时通讯系统利用企业即时通讯可以建立一个以自身公司为核心的即时通讯平台,创造新型办公沟通模式,提升办公效率,降低企业通信费用,增强企业内部沟通能力,改善企业与客户之间的沟通渠道。

用户可以直接用邮箱、IM号和手机号登录,提供即时通讯等方面的功能。

2、蓝梦教育集团即时通讯系统著名教育企业蓝梦教育集团(Blue Dream Group),为了能够在中国迅速地开展与教育产品和IT技能培训有关的各个方面的业务、并期望能够取得比较好的效益和提高各项教育产品的质量以迎接新的挑战,需要全面地提升本土化的信息化项目建设的进度、拟计划开发出蓝梦教育集团即时通讯系统提高企业内部的工作效率。

同时也期望通过IM系统中的语音和视频交互、文件传输、屏幕抓取、远程协助等功能增强师生之间的沟通效率和提高教学效果。

如下为蓝梦教育集团即时通讯系统客户端程序的主界面示例图。

3、为什么要选择此IM系统项目作为实训教学(1)IM系统是比较流行的企业通讯项目企业即时通讯系统是目前企业内部员工之间、企业与外界之间通讯的主要工具,并能够打破地域的限制。

JAVA课程设计报告——“即时通”网络通信系统的设计与开发doc

JAVA课程设计报告——“即时通”网络通信系统的设计与开发doc

武汉理工大学华夏学院课程设计报告书课程名称:JAVA课程设计题目:“即时通”网络通信系统的设计与开发系名:信息工程系专业班级:计算机1102班姓名:学号: 10210410206指导教师:2012年 6 月4日课程设计任务书学生姓名:徐立专业班级:计算机1102班指导教师:詹春华邱珊工作单位:信息工程系设计题目:“即时通”网络通信系统的设计与开发初始条件:《即时通》,是一个类似于QQ的网络通讯软件。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)使用JAVA开发一个类似QQ的网络通讯系统,该系统能够进行用户管理,聊天通讯及系统管理。

该聊天室系统包括客户端和服务器端。

本系统使用JAVA SWING技术进行前台界面的设计和开发, 使用Socket 与 ServerSocket网络编程进行客户端与服务器端的连接与通信,使用Java输入输出流进行客户端与服务器端之间的数据传输,使用JDBC技术与后台数据库进行连接和访问。

该系统将能够实现用户登录功能,并能对用户信息进行增加,删除,修改和查询。

登录的用户将可以进行群发,私聊及文件发送和接收。

系统总体架构如下:主要任务:设计报告撰写格式要求:一、课程设计说明书(或报告书)正文内容【设计题目】例如:“即时通”网络通信系统的设计与开发【开发环境】硬件环境:微机系列,内存在1G以上,软件环境:Microsoft Windows XP 【开发工具】 NetBeans IDE【完成时间】2012.6 .4-----2012.6.15【需求分析】分析阐述要实现的系统应具有什么样的功能。

【系统总体设计方案】在明确了所要解决的问题后,很自然地就要提出自己解决问题的思路和方案。

让读者了解方案的总体设计和关键技术。

要阐述自己的设计方案,说明为什么要选择或设计这样的方案。

具体包括:系统总的设计思路,体系结构, 总体架构, 功能模块图;各功能模块所要达到的设计目标的简单介绍;设计的数据字典(数据库、表的结构);使用的设计软硬件环境和开发技术和平台等。

基于java的QQ聊天系统毕业设计说明书

基于java的QQ聊天系统毕业设计说明书

基于java的QQ聊天系统第一章.绪论1.1 课题背景随着互联网逐步普及,人们的生活和工作也越来越离不开信息网络的支持,而聊天室是人们最常见,最直接的网上交流的方式。

本聊天系统以聊天交流为主,为广大用户提供一个借助网络进行人际交往的平台,也是网络与现实最贴近的实用型网站。

本文所介绍的网络聊天系统是基于开放的JA V A应用程序开发设计的,其主要特性是能动态、实时的完成信息的传递,且具有高效的交互性,更有效的处理客户请求,易于维护和更新,其运行所需环境及其工作流程和各个功能控件的工作原理将在本文依次介绍,并且文中提供了部分程序源代码。

1.2 课题研究的目的和意义即时通讯系统的最大特点是在网上进行信息的实时交流。

即时通讯系统的发展使得人们可以进行网上社交,获得社会的尊重,实现自我需求,这同时也为了网络即时通讯软件发展的驱动力。

而物质文明的日益发达所带来的副作用,有使得人们习惯与周围的人保持距离。

以致人们更愿意对陌生人敞开心扉。

与传统通讯方式相比,即时通讯系统具有快捷,廉价,隐秘性高的特点,在网络中可以跨年龄,身份,行业,地域的限制,达到人与人,人与信息之间的零交流。

从这点上讲,网络即时通讯的出现改变人们的沟通方式和交友文化,大大拓展了个人生活交流的空间。

1.3 国内外概况目前国内外做聊天系统的很多,产品也是琳琅满目,国内有诸如腾讯QQ与新浪UC网易泡泡等,国外著名的有MSN以及跨平台GAIM等.本人取最具有代表性的QQ和MSN进行了一些研究,为我毕业设计聊天系统做了充分的准备.腾讯无疑使国内即时通讯市场的霸主,自从99年进入即时通讯领域并迅速占领市场之后,其在国内用户数量始终高居榜首,即时近几年面对微软MSN的强大攻势,腾讯QQ的市场占有率依然稳步增长.参考了许多资料,以及自己通过观察腾讯QQ运行时的各种细节.可以确定腾讯QQ是以多服务器提供服务,服务器总控客户端客户端之间UDP直连通信的.并且在两个客户端之间不能建立直接的情况下,才由服务器进行中转通信.第2章.系统设计方案的研究2.1 系统的设计方案聊天系统的设计跟普通网站设计有着许多不同的地方,普通网站设计所考虑的因素,例如,普通网站需要对布局进入大量美化以及动画设计等等,而聊天室只要提供满足访客双方直接实时聊天即可。

课程设计项目《蓝梦教育集团即时通讯系统》(仿腾讯QQ)——完善客户端聊天信息主窗口程序类(第3部分)

课程设计项目《蓝梦教育集团即时通讯系统》(仿腾讯QQ)——完善客户端聊天信息主窗口程序类(第3部分)

J2EE课程设计实训教学示例项目《蓝梦教育集团即时通讯系统》(仿腾讯QQ)——完善客户端聊天信息主窗口程序类(第3部分)1.1.1完善客户端聊天信息主窗口类ChatMainFrame中的各个事件类1、ChatMainFrame_ActionListenerEventHandler(1)类名称为ChatMainFrame_ActionListenerEventHandler,包名称为com.px1987.imsystem.client.frame.chatframe.event,实现java.awt.event.ActionListener接口(2)编程该事件类package com.px1987.imsystem.client.frame.chatframe.event;import java.awt.Color;import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import ng.reflect.InvocationTargetException;import ng.reflect.Method;import javax.swing.ImageIcon;import javax.swing.JColorChooser;import javax.swing.text.BadLocationException;import javax.swing.text.SimpleAttributeSet;import javax.swing.text.StyleConstants;import javax.swing.text.StyledDocument;import com.px1987.imsystem.client.dialog.FontChooserDialog;import com.px1987.imsystem.client.exception.IMSystemException;import com.px1987.imsystem.client.factory.GenericTypeMethodsFactory;import com.px1987.imsystem.client.frame.chatframe.panel.ChatMainFrame_CenterInfoPanel; import com.px1987.imsystem.client.frame.floatwindow.SelectUserFaceWindow;importcom.px1987.imsystem.client.httpclient.inter.HttpClientMessageInfoRequestResponseInterface; import com.px1987.imsystem.client.util.DateAndTimeUtil;import com.px1987.imsystem.client.util.IMSystemClientUtils;import com.px1987.imsystem.client.xmlparse.ParseXMLConfFileAllTags;import com.px1987.imsystem.serializableVO.MessageInfoVO;public class ChatMainFrame_ActionListenerEventHandler implements ActionListener { private ChatMainFrame_CenterInfoPanel eventSourceContainer = null;private String eventHandlerMethodName = null;public ChatMainFrame_ActionListenerEventHandler() {super();}public ChatMainFrame_ActionListenerEventHandler(ChatMainFrame_CenterInfoPanel eventSourceContainer,String eventHandlerMethodName) {super();this.eventSourceContainer = eventSourceContainer;this.eventHandlerMethodName = eventHandlerMethodName;}@SuppressWarnings("unchecked")public void actionPerformed(ActionEvent actionEventObject) {Class currentEventHandlerClass = this.getClass();Method eventHandlerMmethod = null;try { //获得事件处理方法eventHandlerMmethod = currentEventHandlerClass.getMethod(this.eventHandlerMethodName, new Class[] {actionEventObject.getClass()});} catch (SecurityException exception) {exception.printStackTrace();System.out.println("出现了SecurityException异常错误,错误信息为:" +exception.getMessage());} catch (NoSuchMethodException exception) {exception.printStackTrace();System.out.println("出现了NoSuchMethodException异常错误,错误信息为:" + exception.getMessage());}try { //调用指定的事件处理方法eventHandlerMmethod.invoke(this, new Object[] {actionEventObject});} catch (InvocationTargetException exception) {exception.printStackTrace();System.out.println("出现了InvocationTargetException异常错误,错误信息为:" + exception.getMessage());} catch (IllegalArgumentException exception) {exception.printStackTrace();System.out.println("出现了IllegalArgumentException异常错误,错误信息为:" + exception.getMessage());} catch (IllegalAccessException exception) {exception.printStackTrace();System.out.println("出现了IllegalAccessException异常错误,错误信息为:" + exception.getMessage());}}public void closeThisFrameButton_onClick(ActionEvent e) {eventSourceContainer.getOneChatMainFrame().dispose();eventSourceContainer.getOneChatMainFrame().setVisible(false);}public void sendMessageButton_onClick(ActionEvent e) {String messageContent=eventSourceContainer.getSendInfoTextPane().getText();if((messageContent.equals("")||(messageContent.length()==0))){return; //如果本次没有真正输入聊天信息的内容,则不进行发送}// MessageInfoVO returnMessageInfoVO=null;String sendMessageTime=DateAndTimeUtil.getHourMinuteSecondString();StringmessageSender=IMSystemClientUtils.getUserLoginOnLineInfoVOInstance().getUserAliaoName ()+"("+IMSystemClientUtils.getUserLoginOnLineInfoVOInstance().getUserIMCode()+")";StringmessageReceiver=eventSourceContainer.getOneFindFriendInfoVO().getUserAliaoName()+"("+ eventSourceContainer.getOneFindFriendInfoVO().getUserIMCode()+")";MessageInfoVO oneMessageInfoVO=new MessageInfoVO();oneMessageInfoVO.setSendMessageTime(sendMessageTime);oneMessageInfoVO.setMessageContent(messageContent);oneMessageInfoVO.setMessageSender(messageSender);oneMessageInfoVO.setMessageReceiver(messageReceiver);StringhttpClientMessageInfoRequestResponseeClassName=ParseXMLConfFileAllTags.getProperty("h ttpClientMessageInfoRequestResponse.className");HttpClientMessageInfoRequestResponseInterface oneHttpClientMessageInfoRequest=null;try {oneHttpClientMessageInfoRequest =new GenericTypeMethodsFactory().newSomeOneInstance(httpClientMessageInfoRequestResponsee ClassName); //利用范型工厂方法直接获得目标对象实例}catch (IMSystemException exception) {exception.printStackTrace();System.out.println("出现了OASystemException异常错误,错误信息为:"+exception.getMessage());}try {// returnMessageInfoVO = oneHttpClientMessageInfoRequest.doSendMessageInfo(oneMessageInfoVO);oneHttpClientMessageInfoRequest.doSendMessageInfo(oneMessageInfoVO);} catch (IMSystemException exception) {exception.printStackTrace();System.out.println("出现了OASystemException异常错误,错误信息为:" +exception.getMessage());}eventSourceContainer.getSendInfoTextPane().setText("");String oneMessageText=sendMessageTime+" "+messageSender+"对"+messageReceiver+"说:"+ "\n ";//下面的代码设置标题为粗体样式SimpleAttributeSet oneSimpleAttributeSet = new SimpleAttributeSet();StyleConstants.setBold(oneSimpleAttributeSet, true);StyledDocumentchatResultTextPaneDocument=eventSourceContainer.getChatResultTextPane().getStyledDocume nt();try {chatResultTextPaneDocument.insertString(chatResultTextPaneDocument.getLength(),oneMessageText,oneSimpleAttributeSet);} catch (BadLocationException exception) {exception.printStackTrace();System.out.println("出现了BadLocationException异常错误,错误信息为:" + exception.getMessage());}chatResultTextPaneDocument=eventSourceContainer.getChatResultTextPane().getStyledDoc ument();try {chatResultTextPaneDocument.insertString(chatResultTextPaneDocument.getLength(),messageContent+"\n",eventSourceContainer.getSendInfoTextPane().getParagraphAttributes());} catch (BadLocationException ex) {}}public void chooseFaceButton_onClick(ActionEvent e) {int floatPanelWidth = 436;int floatPanelHeight = 320;SelectUserFaceWindow oneSelectUserFaceWindow =new SelectUserFaceWindow(eventSourceContainer.getOneChatMainFrame(),floatPanelWidth, floatPanelHeight);oneSelectUserFaceWindow.openThisWindow();}Color chatMessageForegroundColor = Color.BLACK;public void setupForegroundColorButton_onClick(ActionEvent e) {Color userSelectColor =JColorChooser.showDialog(eventSourceContainer.getOneChatMainFrame(),"请选择您的文字的颜色",Color.black);if (userSelectColor != null) {chatMessageForegroundColor = userSelectColor;}SimpleAttributeSet oneSimpleAttributeSet = new SimpleAttributeSet();StyleConstants.setForeground(oneSimpleAttributeSet,chatMessageForegroundColor);eventSourceContainer.getSendInfoTextPane().setCharacterAttributes(oneSimpleAttributeSet, false); //不覆盖其他的属性项目}public void insertImageFileButton_onClick(ActionEvent e) {String userSelectedImageFileName = null;userSelectedImageFileName = eventSourceContainer.getSelectedImageFile();eventSourceContainer.insertImageFileToSendInfoTextPane(new ImageIcon(userSelectedImageFileName));}public void returnKeySendMessageMenuItem_onClick(ActionEvent e) {}public void ctrlAndReturnKeySendMessageMenuItem_onClick(ActionEvent e) {}public void messagePatternMenuItem_onClick(ActionEvent e) {}public void selfDefineFontButton_onClick(ActionEvent e) {FontChooserDialog oneFontChooserDialog=new FontChooserDialog(null,true,null); //参数true代表为模式对话框oneFontChooserDialog.setAlwaysOnTop(true);oneFontChooserDialog.setVisible(true);Font returnUserSelectedFont=oneFontChooserDialog.getUserSelectFontInThisDialog();SimpleAttributeSet oneSimpleAttributeSet = new SimpleAttributeSet();StyleConstants.setFontFamily(oneSimpleAttributeSet, returnUserSelectedFont.getFamily());StyleConstants.setFontSize(oneSimpleAttributeSet, returnUserSelectedFont.getSize());if(returnUserSelectedFont.isBold()){StyleConstants.setBold(oneSimpleAttributeSet, true);}else if(returnUserSelectedFont.isItalic()){StyleConstants.setItalic(oneSimpleAttributeSet, true);}else if(returnUserSelectedFont.isPlain()){StyleConstants.setBold(oneSimpleAttributeSet, false);StyleConstants.setItalic(oneSimpleAttributeSet, false);}else if((returnUserSelectedFont.isBold())&&(returnUserSelectedFont.isItalic())){ StyleConstants.setBold(oneSimpleAttributeSet, true);StyleConstants.setItalic(oneSimpleAttributeSet, true);}eventSourceContainer.getSendInfoTextPane().setCharacterAttributes(oneSimpleAttributeSet, false); //不覆盖其他的属性项目}}2、ChatMainFrame_ItemListenerEventHandler(1)类名称为ChatMainFrame_ItemListenerEventHandler,包名称为com.px1987.imsystem.client.frame.chatframe.event,实现java.awt.event.ItemListener接口(2)编程该事件类package com.px1987.imsystem.client.frame.chatframe.event;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import ng.reflect.InvocationTargetException;import ng.reflect.Method;import javax.swing.text.SimpleAttributeSet;import javax.swing.text.StyleConstants;import com.px1987.imsystem.client.frame.chatframe.panel.ChatMainFrame_CenterInfoPanel; public class ChatMainFrame_ItemListenerEventHandler implements ItemListener { private ChatMainFrame_CenterInfoPanel eventSourceContainer = null;private String eventHandlerMethodName = null;public ChatMainFrame_ItemListenerEventHandler() {super();}public ChatMainFrame_ItemListenerEventHandler(ChatMainFrame_CenterInfoPaneleventSourceContainer, String eventHandlerMethodName) { super();this.eventSourceContainer = eventSourceContainer;this.eventHandlerMethodName = eventHandlerMethodName;}@SuppressWarnings("unchecked")public void itemStateChanged(ItemEvent itemEventObject) {Class currentEventHandlerClass = this.getClass();Method eventHandlerMmethod = null;try { //获得事件处理方法eventHandlerMmethod = currentEventHandlerClass.getMethod(this.eventHandlerMethodName, new Class[] {itemEventObject.getClass()});} catch (SecurityException exception) {exception.printStackTrace();System.out.println("出现了SecurityException异常错误,错误信息为:" +exception.getMessage());} catch (NoSuchMethodException exception) {exception.printStackTrace();System.out.println("出现了NoSuchMethodException异常错误,错误信息为:" + exception.getMessage());}try { //调用指定的事件处理方法eventHandlerMmethod.invoke(this, new Object[] {itemEventObject});} catch (InvocationTargetException exception) {exception.printStackTrace();System.out.println("出现了InvocationTargetException异常错误,错误信息为:" + exception.getMessage());} catch (IllegalArgumentException exception) {exception.printStackTrace();System.out.println("出现了IllegalArgumentException异常错误,错误信息为:" + exception.getMessage());} catch (IllegalAccessException exception) {exception.printStackTrace();System.out.println("出现了IllegalAccessException异常错误,错误信息为:" +exception.getMessage());}}public void fontColorFormatButton_itemStateChanged(ItemEvent e) {if(eventSourceContainer.getSendMessageToolBar().getFontColorFormatButton().isSelected()) { eventSourceContainer.getCenterDownButtonPanel().add(eventSourceContainer.getFontSetupToolBar(),java.awt.BorderLayout.SOUTH);} else {eventSourceContainer.getCenterDownButtonPanel().remove(eventSourceContainer.getFontSetupToolBar());}eventSourceContainer.invalidate();eventSourceContainer.repaint();eventSourceContainer.validate();}public void fontSizeJComboBox_ItemListener(ItemEvent e) {int fontSize = Integer.parseInt( (String) eventSourceContainer.getFontSetupToolBar().getFontSizeJComboBox().getSelectedItem());SimpleAttributeSet oneSimpleAttributeSet = new SimpleAttributeSet();StyleConstants.setFontSize(oneSimpleAttributeSet, fontSize);eventSourceContainer.getSendInfoTextPane().setCharacterAttributes(oneSimpleAttributeSet, false); //不覆盖其他的属性项目}public void fontNameJComboBox_ItemListener(ItemEvent e) {String fontName = (String) eventSourceContainer.getFontSetupToolBar().getFontNameJComboBox().getSelectedItem();SimpleAttributeSet oneSimpleAttributeSet = new SimpleAttributeSet();StyleConstants.setFontFamily(oneSimpleAttributeSet, fontName);eventSourceContainer.getSendInfoTextPane().setCharacterAttributes(oneSimpleAttributeSet, false); //不覆盖其他的属性项目}/*在JTextPane中常用到属性类:SimpleAttributeSet和StyleConstant。

《蓝梦教育集团即时通讯系统》(仿腾讯QQ)——信息主窗口类中的各个子面板和弹出式菜单程序类(第2部分)

《蓝梦教育集团即时通讯系统》(仿腾讯QQ)——信息主窗口类中的各个子面板和弹出式菜单程序类(第2部分)

J2EE课程设计实训教学示例项目《蓝梦教育集团即时通讯系统》(仿腾讯QQ)——完善客户端系统信息主窗口类中的各个子面板和弹出式菜单程序类(第2/2部分)1.1.1实现相关的弹出式菜单的功能1、FriendInfoTreeNodeSelfPopupMenu类(1)类名称为FriendInfoTreeNodeSelfPopupMenu,包名称为com.px1987.imsystem.client.frame.imsystemmainframe.tree,继承于ponent.SelfDefineJPopupMenu_ImageBar类(2)编程该类package com.px1987.imsystem.client.frame.imsystemmainframe.tree;import javax.swing.ImageIcon;import javax.swing.JCheckBoxMenuItem;import javax.swing.JMenuItem;import ponent.SelfDefineJCheckBoxMenuItem;import ponent.SelfDefineJMenuItem;import ponent.SelfDefineJPopupMenu_ImageBar;import com.px1987.imsystem.client.frame.IMSystemMainFrame;public class FriendInfoTreeNodeSelfPopupMenu extends SelfDefineJPopupMenu_ImageBar { private static final long serialVersionUID = -3719946677412611465L;private IMSystemMainFrame oneIMSystemMainFrame=null;public IMSystemMainFrame getOneIMSystemMainFrame() {return oneIMSystemMainFrame;}public void setOneIMSystemMainFrame(IMSystemMainFrame oneIMSystemMainFrame) { this.oneIMSystemMainFrame = oneIMSystemMainFrame;}private JMenuItem imSpaceMenuItem = null;private JMenuItem onePersonInfoMenuItem = null;private JMenuItem updateMyHeadImageMenuItem = null;private JCheckBoxMenuItem showMyHeadImageCheckBoxMenuItem = null;private JMenuItem netRecordMenuItem = null;private JMenuItem graftMenuItem =null;public FriendInfoTreeNodeSelfPopupMenu() {super();}public FriendInfoTreeNodeSelfPopupMenu(String label,IMSystemMainFrame oneIMSystemMainFrame) {super(label);this.oneIMSystemMainFrame=oneIMSystemMainFrame;createThisTreeNodeSelfPopupMenu();}public FriendInfoTreeNodeSelfPopupMenu(String label) {super(label);}public FriendInfoTreeNodeSelfPopupMenu(ImageIcon imageIcon) {super(imageIcon);}private void createThisTreeNodeSelfPopupMenu(){imSpaceMenuItem = new SelfDefineJMenuItem();imSpaceMenuItem.setText("IM 空间");imSpaceMenuItem.setIcon(newImageIcon(getClass().getResource("/images/treePopMenu/sefttree1.jpg")));this.add(imSpaceMenuItem);onePersonInfoMenuItem= new SelfDefineJMenuItem();onePersonInfoMenuItem.setText("个人资料");this.add(onePersonInfoMenuItem);updateMyHeadImageMenuItem = new SelfDefineJMenuItem();updateMyHeadImageMenuItem.setText("更改我的头像");this.add(updateMyHeadImageMenuItem);showMyHeadImageCheckBoxMenuItem = new SelfDefineJCheckBoxMenuItem();showMyHeadImageCheckBoxMenuItem.setSelected(true);showMyHeadImageCheckBoxMenuItem.setText("显示我的头像");this.add(showMyHeadImageCheckBoxMenuItem);netRecordMenuItem = new SelfDefineJMenuItem();netRecordMenuItem.setText("网络备完录");netRecordMenuItem.setIcon(newImageIcon(getClass().getResource("/images/treePopMenu/sefttree2.jpg")));this.add(netRecordMenuItem);graftMenuItem = new SelfDefineJMenuItem();graftMenuItem.setText("送礼许愿");graftMenuItem.setIcon(newImageIcon(getClass().getResource("/images/treePopMenu/sefttree3.jpg")));this.add(graftMenuItem);}}2、FriendInfoTreeNodePopupMenu类(1)类名称为FriendInfoTreeNodePopupMenu,包名称为com.px1987.imsystem.client.frame.imsystemmainframe.tree,继承于ponent.SelfDefineJPopupMenu_ImageBar类(2)编程该类package com.px1987.imsystem.client.frame.imsystemmainframe.tree;import javax.swing.ButtonGroup;import javax.swing.ImageIcon;import javax.swing.JCheckBoxMenuItem;import javax.swing.JMenu;import javax.swing.JMenuItem;import ponent.SelfDefineJCheckBoxMenuItem;import ponent.SelfDefineJMenu;import ponent.SelfDefineJMenuItem;import ponent.SelfDefineJPopupMenu_ImageBar;import com.px1987.imsystem.client.frame.IMSystemMainFrame;importcom.px1987.imsystem.client.frame.imsystemmainframe.treeevent.FriendInfoTreeNodePopupMe nu_ActionListenerEventHandler;import com.px1987.imsystem.client.util.IMSystemClientUtils;public class FriendInfoTreeNodePopupMenu extends SelfDefineJPopupMenu_ImageBar { private static final long serialVersionUID = 8215073581183947613L;private IMSystemMainFrame oneIMSystemMainFrame=null;private JMenu personHeadImageMenu = null;private JCheckBoxMenuItem bigHeadImageMenuItem = null;private JCheckBoxMenuItem smallHeadImageMenuItem =null;private JCheckBoxMenuItem standardHeadImageMenuItem = null;private JCheckBoxMenuItem showMyHeadImageMenuItem = null;private JMenu nameInfoShowMenu =null;private JCheckBoxMenuItem showAnnotationInfoMenuItem = null;private JCheckBoxMenuItem showLoveNameInfoMenuItem = null;private JMenu columnShowMenu = null;private JCheckBoxMenuItem singleShowMenuItem = null;private JCheckBoxMenuItem multiShowMenuItem = null;private JCheckBoxMenuItem showClearInfoMenuItem = null;private JCheckBoxMenuItem slideEffectMenuItem = null;private JMenu sortShowMenu = null;private JCheckBoxMenuItem sortByIDMenuItem = null;private JCheckBoxMenuItem sortByUpdateTimeMenuItem =null;private JCheckBoxMenuItem sortByNameMenuItem = null;private JMenuItem showOnLinePersonInfoMenuItem = null;private JCheckBoxMenuItem showNoKnownPersonGroupInfoMenuItem =null;private JCheckBoxMenuItem showBlockNameListMenuItem = null;private JMenuItem addNewGroupInfoMenuItem = null;private JMenuItem addNewFriendMenuItem = null;private JMenuItem renameMenuItem = null;private JMenuItem deleteThisGroupMenuItem = null;public FriendInfoTreeNodePopupMenu() {super();}public FriendInfoTreeNodePopupMenu(String label) {super(label);}public FriendInfoTreeNodePopupMenu(String label,IMSystemMainFrame oneIMSystemMainFrame) {super(label);this.oneIMSystemMainFrame=oneIMSystemMainFrame;createThisTreeNodePopupMenu();}public FriendInfoTreeNodePopupMenu(ImageIcon imageIcon) {super(imageIcon);}private void createThisTreeNodePopupMenu(){initThisTreeNodePopupMenu();createAllMenuAndMenuItemForThisPopup();}private void initThisTreeNodePopupMenu(){this.setBackground(IMSystemClientUtils.getNoSerializableVOInstance().getLoginFormBgColor());}private void createAllMenuAndMenuItemForThisPopup(){personHeadImageMenu = new SelfDefineJMenu();personHeadImageMenu.setText("头像显示方式");personHeadImageMenu.setIcon(new ImageIcon(getClass().getResource("/images/treePopMenu/headimage.jpg")));this.add(personHeadImageMenu);ButtonGroup oneButtonGroup=new ButtonGroup();bigHeadImageMenuItem = new SelfDefineJCheckBoxMenuItem();oneButtonGroup.add(bigHeadImageMenuItem);smallHeadImageMenuItem = new SelfDefineJCheckBoxMenuItem();oneButtonGroup.add(smallHeadImageMenuItem);standardHeadImageMenuItem = new SelfDefineJCheckBoxMenuItem();oneButtonGroup.add(standardHeadImageMenuItem);bigHeadImageMenuItem.setText("大头像");bigHeadImageMenuItem.addActionListener(newFriendInfoTreeNodePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "bigHeadImageMenuItem_onClick"));smallHeadImageMenuItem.setText("小头像");smallHeadImageMenuItem.addActionListener(newFriendInfoTreeNodePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "smallHeadImageMenuItem_onClick"));standardHeadImageMenuItem.setText("标准头像");standardHeadImageMenuItem.addActionListener(newFriendInfoTreeNodePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "standardHeadImageMenuItem_onClick"));showMyHeadImageMenuItem = new SelfDefineJCheckBoxMenuItem();showMyHeadImageMenuItem.setText("显示我的头像");showMyHeadImageMenuItem.setSelected(true);showMyHeadImageMenuItem.addActionListener(newFriendInfoTreeNodePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "showMyHeadImageMenuItem_onClick"));personHeadImageMenu.add(bigHeadImageMenuItem);personHeadImageMenu.add(smallHeadImageMenuItem);personHeadImageMenu.add(standardHeadImageMenuItem);personHeadImageMenu.addSeparator();personHeadImageMenu.add(showMyHeadImageMenuItem);nameInfoShowMenu = new SelfDefineJMenu();nameInfoShowMenu.setText("名称显示");this.add(nameInfoShowMenu);ButtonGroup twoButtonGroup=new ButtonGroup();showAnnotationInfoMenuItem = new SelfDefineJCheckBoxMenuItem();twoButtonGroup.add(showAnnotationInfoMenuItem);showLoveNameInfoMenuItem = new SelfDefineJCheckBoxMenuItem();twoButtonGroup.add(showLoveNameInfoMenuItem);showAnnotationInfoMenuItem.setText("显示备注");showAnnotationInfoMenuItem.setSelected(true);showAnnotationInfoMenuItem.addActionListener(newFriendInfoTreeNodePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "showAnnotationInfoMenuItem_onClick"));showLoveNameInfoMenuItem.setText("显示昵称");showLoveNameInfoMenuItem.addActionListener(newFriendInfoTreeNodePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "showLoveNameInfoMenuItem_onClick"));nameInfoShowMenu.add(showAnnotationInfoMenuItem);nameInfoShowMenu.add(showLoveNameInfoMenuItem);columnShowMenu = new SelfDefineJMenu();columnShowMenu.setText("列表显示");this.add(columnShowMenu);ButtonGroup threeButtonGroup = new ButtonGroup();singleShowMenuItem = new SelfDefineJCheckBoxMenuItem();threeButtonGroup.add(singleShowMenuItem);multiShowMenuItem = new SelfDefineJCheckBoxMenuItem();threeButtonGroup.add(multiShowMenuItem);singleShowMenuItem.setText("单列显示");singleShowMenuItem.setSelected(true);singleShowMenuItem.addActionListener(newFriendInfoTreeNodePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "singleShowMenuItem_onClick"));columnShowMenu.add(singleShowMenuItem);multiShowMenuItem.setText("多列平铺");multiShowMenuItem.addActionListener(newFriendInfoTreeNodePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "multiShowMenuItem_onClick"));columnShowMenu.add(multiShowMenuItem);columnShowMenu.addSeparator();showClearInfoMenuItem = new SelfDefineJCheckBoxMenuItem();showClearInfoMenuItem.setText("显示清爽资料");showClearInfoMenuItem.addActionListener(newFriendInfoTreeNodePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "ShowClearInfoMenuItem_onClick"));columnShowMenu.add(showClearInfoMenuItem);slideEffectMenuItem = new SelfDefineJCheckBoxMenuItem();slideEffectMenuItem.setText("滑动效果");slideEffectMenuItem.addActionListener(newFriendInfoTreeNodePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "slideEffectMenuItem_onClick"));columnShowMenu.addSeparator();columnShowMenu.add(slideEffectMenuItem);this.addSeparator();sortShowMenu = new SelfDefineJMenu();sortShowMenu.setText("排序显示");this.add(sortShowMenu);ButtonGroup fourButtonGroup = new ButtonGroup();sortByIDMenuItem = new SelfDefineJCheckBoxMenuItem();fourButtonGroup.add(sortByIDMenuItem);sortByUpdateTimeMenuItem = new SelfDefineJCheckBoxMenuItem();fourButtonGroup.add(sortByUpdateTimeMenuItem);sortByNameMenuItem = new SelfDefineJCheckBoxMenuItem();fourButtonGroup.add(sortByNameMenuItem);sortByIDMenuItem.setText("按身份标识排序");sortByUpdateTimeMenuItem.setText("按服务更新排序");sortByNameMenuItem.setText("按名称排序");sortShowMenu.add(sortByIDMenuItem);sortShowMenu.add(sortByUpdateTimeMenuItem);sortShowMenu.add(sortByNameMenuItem);this.addSeparator();showOnLinePersonInfoMenuItem = new SelfDefineJMenuItem();showOnLinePersonInfoMenuItem.setText("显示在线联系人");this.add(showOnLinePersonInfoMenuItem);this.addSeparator();showNoKnownPersonGroupInfoMenuItem = new SelfDefineJCheckBoxMenuItem();showNoKnownPersonGroupInfoMenuItem.setText("显示陌生人分组");showNoKnownPersonGroupInfoMenuItem.addActionListener(newFriendInfoTreeNodePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "showNoKnownPersonGroupInfoMenuItem_onClick"));this.add(showNoKnownPersonGroupInfoMenuItem);showBlockNameListMenuItem = new SelfDefineJCheckBoxMenuItem();showBlockNameListMenuItem.setText("显示黑名单");showBlockNameListMenuItem.addActionListener(newFriendInfoTreeNodePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "showBlockNameListMenuItem_onClick"));this.add(showBlockNameListMenuItem);this.addSeparator();addNewGroupInfoMenuItem = new SelfDefineJMenuItem();addNewGroupInfoMenuItem.setText("添加分组");addNewGroupInfoMenuItem.addActionListener(newFriendInfoTreeNodePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "addNewGroupInfoMenuItem_onClick"));this.add(addNewGroupInfoMenuItem);addNewFriendMenuItem = new SelfDefineJMenuItem();addNewFriendMenuItem.setText("添加联系人");addNewFriendMenuItem.setIcon(new ImageIcon(getClass().getResource("/images/treePopMenu/addFriend.jpg")));addNewFriendMenuItem.addActionListener(new FriendInfoTreeNodePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "addNewFriendMenuItem_onClick"));this.add(addNewFriendMenuItem);this.addSeparator();renameMenuItem = new SelfDefineJMenuItem();renameMenuItem.setText("重命名");renameMenuItem.addActionListener(newFriendInfoTreeNodePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "renameMenuItem_onClick"));deleteThisGroupMenuItem = new SelfDefineJMenuItem();deleteThisGroupMenuItem.setText("删除该组");deleteThisGroupMenuItem.setIcon(new ImageIcon(getClass().getResource("/images/treePopMenu/deleteGroup.jpg")));deleteThisGroupMenuItem.addActionListener(new FriendInfoTreeNodePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "deleteThisGroupMenuItem_onClick"));this.add(renameMenuItem);this.add(deleteThisGroupMenuItem);}public JMenuItem getDeleteThisGroupMenuItem() {return deleteThisGroupMenuItem;}public JMenuItem getRenameMenuItem() {return renameMenuItem;}public JMenuItem getAddNewGroupInfoMenuItem() {return addNewGroupInfoMenuItem;}}3、FriendInfoTreeNodePopupMenu_byClickOut类(1)类名称为FriendInfoTreeNodePopupMenu_byClickOut,包名称为com.px1987.imsystem.client.frame.imsystemmainframe.tree,继承于ponent.SelfDefineJPopupMenu_ImageBar类(2)编程该类package com.px1987.imsystem.client.frame.imsystemmainframe.tree;import javax.swing.ButtonGroup;import javax.swing.ImageIcon;import javax.swing.JCheckBoxMenuItem;import javax.swing.JMenu;import javax.swing.JMenuItem;import ponent.SelfDefineJCheckBoxMenuItem;import ponent.SelfDefineJMenu;import ponent.SelfDefineJMenuItem;import ponent.SelfDefineJPopupMenu_ImageBar;import com.px1987.imsystem.client.frame.IMSystemMainFrame;importcom.px1987.imsystem.client.frame.imsystemmainframe.event.IMSystemMainFrame_ActionList enerEventHandler;public class FriendInfoTreeNodePopupMenu_byClickOut extends SelfDefineJPopupMenu_ImageBar {private static final long serialVersionUID = -8871613980569893992L;private IMSystemMainFrame oneIMSystemMainFrame=null;private JMenu personHeadImageMenu_byClickOut = null;private JCheckBoxMenuItem bigHeadImageMenuItem_byClickOut = null;private JCheckBoxMenuItem smallHeadImageMenuItem_byClickOut = null;private JCheckBoxMenuItem standardHeadImageMenuItem_byClickOut = null;private JCheckBoxMenuItem showMyHeadImageMenuItem_byClickOut = null;private JMenu nameInfoShowMenu_byClickOut = null;private JCheckBoxMenuItem showAnnotationInfoMenuItem_byClickOut = null;private JCheckBoxMenuItem showLoveNameInfoMenuItem_byClickOut = null;private JMenu columnShowMenu_byClickOut = null;private JCheckBoxMenuItem singleShowMenuItem_byClickOut = null;private JCheckBoxMenuItem multiShowMenuItem_byClickOut =null;private JCheckBoxMenuItem ShowClearInfoMenuItem_byClickOut = null;private JCheckBoxMenuItem slideEffectMenuItem_byClickOut = null;private JMenu sortShowMenu_byClickOut = new SelfDefineJMenu();private JCheckBoxMenuItem sortByIDMenuItem_byClickOut = null;private JCheckBoxMenuItem sortByUpdateTimeMenuItem_byClickOut = null;private JCheckBoxMenuItem sortByNameMenuItem_byClickOut = null;private JMenuItem showOnLinePersonInfoMenuItem_byClickOut = null;private JCheckBoxMenuItem showNoKnownPersonGroupInfoMenuItem_byClickOut =null;private JCheckBoxMenuItem showBlockNameListMenuItem_byClickOut = null;public FriendInfoTreeNodePopupMenu_byClickOut() {super();}public FriendInfoTreeNodePopupMenu_byClickOut(String label) {super(label);}public FriendInfoTreeNodePopupMenu_byClickOut(String label,IMSystemMainFrame oneIMSystemMainFrame) {super(label);this.oneIMSystemMainFrame=oneIMSystemMainFrame;createThisTreeNodePopupMenu_byClickOut();}public FriendInfoTreeNodePopupMenu_byClickOut(ImageIcon imageIcon) { super(imageIcon);}private void createThisTreeNodePopupMenu_byClickOut(){personHeadImageMenu_byClickOut = new SelfDefineJMenu();personHeadImageMenu_byClickOut.setText("头像显示方式");personHeadImageMenu_byClickOut.setIcon(new ImageIcon(getClass().getResource("/images/treePopMenu/headimage.jpg")));this.add(personHeadImageMenu_byClickOut);ButtonGroup oneButtonGroup=new ButtonGroup();bigHeadImageMenuItem_byClickOut = new SelfDefineJCheckBoxMenuItem();oneButtonGroup.add(bigHeadImageMenuItem_byClickOut);smallHeadImageMenuItem_byClickOut = new SelfDefineJCheckBoxMenuItem();oneButtonGroup.add(smallHeadImageMenuItem_byClickOut);standardHeadImageMenuItem_byClickOut = new SelfDefineJCheckBoxMenuItem();oneButtonGroup.add(standardHeadImageMenuItem_byClickOut);bigHeadImageMenuItem_byClickOut.setText("大头像");bigHeadImageMenuItem_byClickOut.addActionListener(newIMSystemMainFrame_ActionListenerEventHandler(oneIMSystemMainFrame,"bigHeadImageMenuItem_onClick"));smallHeadImageMenuItem_byClickOut.setText("小头像");smallHeadImageMenuItem_byClickOut.addActionListener(newIMSystemMainFrame_ActionListenerEventHandler(oneIMSystemMainFrame,"smallHeadImageMenuItem_onClick"));standardHeadImageMenuItem_byClickOut.setText("标准头像");standardHeadImageMenuItem_byClickOut.addActionListener(newIMSystemMainFrame_ActionListenerEventHandler(oneIMSystemMainFrame,"standardHeadImageMenuItem_onClick"));showMyHeadImageMenuItem_byClickOut = new SelfDefineJCheckBoxMenuItem();showMyHeadImageMenuItem_byClickOut.setText("显示我的头像");showMyHeadImageMenuItem_byClickOut.setSelected(true);showMyHeadImageMenuItem_byClickOut.addActionListener(newIMSystemMainFrame_ActionListenerEventHandler(oneIMSystemMainFrame,"showMyHeadImageMenuItem_onClick"));personHeadImageMenu_byClickOut.add(bigHeadImageMenuItem_byClickOut);personHeadImageMenu_byClickOut.add(smallHeadImageMenuItem_byClickOut);personHeadImageMenu_byClickOut.add(standardHeadImageMenuItem_byClickOut);personHeadImageMenu_byClickOut.addSeparator();personHeadImageMenu_byClickOut.add(showMyHeadImageMenuItem_byClickOut);nameInfoShowMenu_byClickOut = new SelfDefineJMenu();nameInfoShowMenu_byClickOut.setText("名称显示");this.add(nameInfoShowMenu_byClickOut);ButtonGroup twoButtonGroup=new ButtonGroup();showAnnotationInfoMenuItem_byClickOut = new SelfDefineJCheckBoxMenuItem();showAnnotationInfoMenuItem_byClickOut.setText("显示备注");showAnnotationInfoMenuItem_byClickOut.setSelected(true);showAnnotationInfoMenuItem_byClickOut.addActionListener(newIMSystemMainFrame_ActionListenerEventHandler(oneIMSystemMainFrame,"showAnnotationInfoMenuItem_onClick"));twoButtonGroup.add(showAnnotationInfoMenuItem_byClickOut);showLoveNameInfoMenuItem_byClickOut = new SelfDefineJCheckBoxMenuItem();twoButtonGroup.add(showLoveNameInfoMenuItem_byClickOut);showLoveNameInfoMenuItem_byClickOut.setText("显示昵称");showLoveNameInfoMenuItem_byClickOut.addActionListener(newIMSystemMainFrame_ActionListenerEventHandler(oneIMSystemMainFrame,"showLoveNameInfoMenuItem_onClick"));nameInfoShowMenu_byClickOut.add(showAnnotationInfoMenuItem_byClickOut);nameInfoShowMenu_byClickOut.add(showLoveNameInfoMenuItem_byClickOut);columnShowMenu_byClickOut = new SelfDefineJMenu();columnShowMenu_byClickOut.setText("列表显示");this.add(columnShowMenu_byClickOut);ButtonGroup threeButtonGroup = new ButtonGroup();singleShowMenuItem_byClickOut = new SelfDefineJCheckBoxMenuItem();threeButtonGroup.add(singleShowMenuItem_byClickOut);multiShowMenuItem_byClickOut = new SelfDefineJCheckBoxMenuItem();threeButtonGroup.add(multiShowMenuItem_byClickOut);singleShowMenuItem_byClickOut.setText("单列显示");singleShowMenuItem_byClickOut.setSelected(true);singleShowMenuItem_byClickOut.addActionListener(newIMSystemMainFrame_ActionListenerEventHandler(oneIMSystemMainFrame,"singleShowMenuItem_onClick"));columnShowMenu_byClickOut.add(singleShowMenuItem_byClickOut);multiShowMenuItem_byClickOut.setText("多列平铺");multiShowMenuItem_byClickOut.addActionListener(newIMSystemMainFrame_ActionListenerEventHandler(oneIMSystemMainFrame,"multiShowMenuItem_onClick"));columnShowMenu_byClickOut.add(multiShowMenuItem_byClickOut);columnShowMenu_byClickOut.addSeparator();ShowClearInfoMenuItem_byClickOut = new SelfDefineJCheckBoxMenuItem();ShowClearInfoMenuItem_byClickOut.setText("显示清爽资料");ShowClearInfoMenuItem_byClickOut.addActionListener(newIMSystemMainFrame_ActionListenerEventHandler(oneIMSystemMainFrame,"ShowClearInfoMenuItem_onClick"));columnShowMenu_byClickOut.add(ShowClearInfoMenuItem_byClickOut);slideEffectMenuItem_byClickOut = new SelfDefineJCheckBoxMenuItem();slideEffectMenuItem_byClickOut.setText("滑动效果");slideEffectMenuItem_byClickOut.addActionListener(newIMSystemMainFrame_ActionListenerEventHandler(oneIMSystemMainFrame,"slideEffectMenuItem_onClick"));columnShowMenu_byClickOut.addSeparator();columnShowMenu_byClickOut.add(slideEffectMenuItem_byClickOut);this.addSeparator();sortShowMenu_byClickOut.setText("排序显示");this.add(sortShowMenu_byClickOut);ButtonGroup fourButtonGroup = new ButtonGroup();sortByIDMenuItem_byClickOut = new SelfDefineJCheckBoxMenuItem();fourButtonGroup.add(sortByIDMenuItem_byClickOut);sortByUpdateTimeMenuItem_byClickOut = new SelfDefineJCheckBoxMenuItem();fourButtonGroup.add(sortByUpdateTimeMenuItem_byClickOut);sortByNameMenuItem_byClickOut = new SelfDefineJCheckBoxMenuItem();fourButtonGroup.add(sortByNameMenuItem_byClickOut);sortByIDMenuItem_byClickOut.setText("按身份标识排序");sortByUpdateTimeMenuItem_byClickOut.setText("按服务更新排序");sortByNameMenuItem_byClickOut.setText("按名称排序");sortShowMenu_byClickOut.add(sortByIDMenuItem_byClickOut);sortShowMenu_byClickOut.add(sortByUpdateTimeMenuItem_byClickOut);sortShowMenu_byClickOut.add(sortByNameMenuItem_byClickOut);this.addSeparator();showOnLinePersonInfoMenuItem_byClickOut = new SelfDefineJMenuItem();showOnLinePersonInfoMenuItem_byClickOut.setText("显示在线联系人");this.add(showOnLinePersonInfoMenuItem_byClickOut);this.addSeparator();showNoKnownPersonGroupInfoMenuItem_byClickOut = new SelfDefineJCheckBoxMenuItem();showNoKnownPersonGroupInfoMenuItem_byClickOut.setText("显示陌生人分组");showNoKnownPersonGroupInfoMenuItem_byClickOut.addActionListener(newIMSystemMainFrame_ActionListenerEventHandler(oneIMSystemMainFrame,"showNoKnownPersonGroupInfoMenuItem_onClick"));this.add(showNoKnownPersonGroupInfoMenuItem_byClickOut);showBlockNameListMenuItem_byClickOut = new SelfDefineJCheckBoxMenuItem();showBlockNameListMenuItem_byClickOut.setText("显示黑名单");showBlockNameListMenuItem_byClickOut.addActionListener(newIMSystemMainFrame_ActionListenerEventHandler(oneIMSystemMainFrame,"showBlockNameListMenuItem_onClick"));this.add(showBlockNameListMenuItem_byClickOut);}}4、FriendInfoTreeNodeSendMessagePopupMenu类(1)类名称为FriendInfoTreeNodeSendMessagePopupMenu,包名称为com.px1987.imsystem.client.frame.imsystemmainframe.tree,继承于ponent.SelfDefineJPopupMenu_ImageBar类(2)编程该类package com.px1987.imsystem.client.frame.imsystemmainframe.tree;import javax.swing.ImageIcon;import javax.swing.JMenu;import javax.swing.JMenuItem;import ponent.SelfDefineJMenu;import ponent.SelfDefineJMenuItem;import ponent.SelfDefineJPopupMenu_ImageBar;import com.px1987.imsystem.client.frame.IMSystemMainFrame;importcom.px1987.imsystem.client.frame.imsystemmainframe.treeevent.TreeNodeSendMessagePopup Menu_ActionListenerEventHandler;public class FriendInfoTreeNodeSendMessagePopupMenu extends SelfDefineJPopupMenu_ImageBar {private static final long serialVersionUID = 2935447048505581114L;private IMSystemMainFrame oneIMSystemMainFrame=null;private JMenuItem sendIMMessageToSomeOneMenuItem = null;private JMenuItem sendMessageByMobileMenuItem = null;private JMenuItem sendMailMenuItem = null;private JMenuItem sendFilesMenuItem = null;private JMenuItem talkMethodOneMenuItem =null;private JMenuItem talkMethodTwoMenuItem = null;private JMenuItem someOneFriendMenuItem = null;private JMenuItem moveToBlackListMenuItem = null;private JMenuItem deleteSomeOneFriendMenuItem = null;private JMenuItem noticeSomeOneMenuItem = null;private JMenuItem updateNameMenuItem = null;private JMenuItem setupPrivateMenuItem = null;private JMenuItem messageRecordMenuItem = null;private JMenuItem viewInfoMenuItem =null;public FriendInfoTreeNodeSendMessagePopupMenu() {super();}public FriendInfoTreeNodeSendMessagePopupMenu(String label) {super(label);}public FriendInfoTreeNodeSendMessagePopupMenu(String label,IMSystemMainFrame oneIMSystemMainFrame) {super(label);this.oneIMSystemMainFrame=oneIMSystemMainFrame;createThisTreeNodeSendMessagePopupMenu();}public FriendInfoTreeNodeSendMessagePopupMenu(ImageIcon imageIcon) { super(imageIcon);}private void createThisTreeNodeSendMessagePopupMenu(){sendIMMessageToSomeOneMenuItem = new SelfDefineJMenuItem();sendIMMessageToSomeOneMenuItem.setIcon(new ImageIcon(getClass().getResource( "/images/chatFrameImage/popUpMenu/3.jpg")));sendIMMessageToSomeOneMenuItem.setText("发送即时消息");sendIMMessageToSomeOneMenuItem.addActionListener(newTreeNodeSendMessagePopupMenu_ActionListenerEventHandler(oneIMSystemMainFrame, "sendIMMessageToSomeOneMenuItem_onClick"));this.add(sendIMMessageToSomeOneMenuItem);sendMessageByMobileMenuItem = new SelfDefineJMenuItem();sendMessageByMobileMenuItem.setText("发送手机信息");sendMessageByMobileMenuItem.setIcon(new ImageIcon(getClass().getResource("/images/chatFrameImage/popUpMenu/4.jpg")));this.add(sendMessageByMobileMenuItem);sendMailMenuItem = new SelfDefineJMenuItem();sendMailMenuItem.setText("发送电子邮件");this.add(sendMailMenuItem);talkMethodOneMenuItem = new SelfDefineJMenuItem(); talkMethodOneMenuItem.setText("交谈方式一");JMenu talkByVideoMenu = new SelfDefineJMenu();talkByVideoMenu.setText("影音交谈");talkByVideoMenu.add(talkMethodOneMenuItem); talkMethodTwoMenuItem = new SelfDefineJMenuItem(); talkMethodTwoMenuItem.setText("交谈方式二");talkByVideoMenu.add(talkMethodTwoMenuItem);this.add(talkByVideoMenu);sendFilesMenuItem = new SelfDefineJMenuItem();sendFilesMenuItem.setText("发送文件");this.add(sendFilesMenuItem);this.addSeparator();someOneFriendMenuItem = new SelfDefineJMenuItem(); someOneFriendMenuItem.setText("朋友");JMenu removeSomeOneMenu = new SelfDefineJMenu(); removeSomeOneMenu.setText("移动联系人至"); removeSomeOneMenu.setIcon(new ImageIcon(getClass().getResource("/images/chatFrameImage/popUpMenu/5.jpg"))); removeSomeOneMenu.add(someOneFriendMenuItem);this.add(removeSomeOneMenu);moveToBlackListMenuItem = new SelfDefineJMenuItem(); moveToBlackListMenuItem.setText("移至黑名单");this.add(moveToBlackListMenuItem); deleteSomeOneFriendMenuItem = new SelfDefineJMenuItem(); deleteSomeOneFriendMenuItem.setText("删除好友"); deleteSomeOneFriendMenuItem.setIcon(new ImageIcon(getClass().getResource( "/images/chatFrameImage/popUpMenu/6.jpg")));。

即时聊天系统QQ项目研发与实现设计

即时聊天系统QQ项目研发与实现设计

课题名称即时聊天系统QQ项目研发与实现摘要随着信息技术的飞速发展,人们在工作中对即时聊天,文件传输的使用和需求越来越多。

现有的商用QQ和MSN等聊天软件娱乐性很强,源代码不明确,信息安全性无法保障,软件本身作为第三方软件不便管理。

从技术层面上说单纯的即时聊天软件结构简单,功能模块不多,因此很多公司自行研发此类软件供内部使用。

聊天工具作为计算机的应用之一,受到了用户的普遍爱好,它把人们带进了一个虚拟的网络世界,大大加深了人们之间的联系,从单一的文本聊天,到语音聊天以及到现在的图像、视频聊天、即时短信的发送和在线游戏等功能的开发,已经大大的拓展了聊天工具的概念,它将会作为未来人们通过因特网相互联系和娱乐的主要平台。

我的毕业设计所开发的是基于Java+SQL Server 2005的即时聊天系统QQ项目研发与实现,这个工具有利于人们的信息交流。

实现企业局域网通讯的目的就是使人们之间的信息交流更加省时、方便。

这个工具可以使局域网内部人员实现聊天功能。

它无需连入国际互联网,设计选用Eclipse开发环境和Microsoft SQL Server 2005数据库。

本系统采用C/S(客户端和服务器)模式,该项目主要采用Socket对象来实现客户端和服务器端之间的通信。

通过对聊天工具的开发,能了解计算机如何通过网络互相通信以及在此相互通信的基础上实现的应用程序级的协议。

关键词:即时聊天;局域网;客户端;服务器端;Socket对象AbstractWith the rapid development of information technology, people in the work of instant messaging, file transfer and demand more and more.Existing commercial QQ and MSN chat software, such as entertainment is very strong, the source code is not clear, information security can't guarantee, inconvenient management software itself as a third party software. From a technical level pure instant messaging software structure is simple, function modules, so many companies to develop such software is for internal use.Chat tools as one of the application of computer, the user's common interests, it bring people into a virtual world, greatly deepened the connections between people, from a single text chat, voice chat, and to present images, video chat, instant messaging, send and to the development of online games and so on, have greatly expanded the concept of chat tool, it will be the future people connect with each other through the Internet and entertainment the main platform.My graduation design development is based on Java + SQL Server 2005 QQ instant messaging system project development and implementation, this tool is helpful for people's communication.Achieve the purpose of the enterprise local area network (LAN) communication between people is to make the information communication more time-saving and convenient.This tool can make the internal staff realize the chat function.It need not connected to the Internet, the design is to choose the Eclipse development environment and Microsoft SQL Server 2005 database.This system USES C/S (client and server) mode, the project mainly USES the Socket object to implement the communication between the client and server.Through the chat tool development, can understand the computer how to communicate with each other through the network and to communicate with each other in the implementation on the basis of the application level protocol.Keywords: Instant messaging;Local area network (LAN);The client;The server side;The Socket object目录第1章绪论 (1)1.1本课题的开发背景及意义 (1)1.2课题研究内容 (1)1.3设计组织结构 (1)第2章开发工具及相关技术 (3)2.1常用开发工具 (3)2.2运行环境 (4)2.3相关技术 (5)2.4 C/S系统结构 (14)第3章需求分析 (16)3.1 可行性分析 (16)3.2 系统需求 (16)3.3系统功能需求 (17)3.4 系统性能要求 (17)第4章系统数据库设计 (19)4.1数据概述 (19)4.2数据库分析 (20)4.3系统数据表设计 (20)第5章系统设计 (22)5.1系统实现关系图 (22)5.2系统功能模块设计 (22)第6章系统功能实现 (23)6.1客户端设计 (23)6.2服务器端设计 (25)结论 (26)致谢 (27)参考文献 (28)第1章绪论1.1本课题的开发背景及意义随着信息技术的飞速发展,人们在工作中对即时聊天,文件传输的使用和需求越来越多。

java即时通讯系统QQ设计及源码下载地址

java即时通讯系统QQ设计及源码下载地址

软件分析软件名称:即时通讯系统:山寨QQ 开发人员: sky目录1、课程设计概述 (2)2、课程设计题目描述 (2)3、系统需求分析与设计 (2)3.1系统需求分析 (2)3.2系统设计 (2)3.2.1 系统总体设计 (2)3.2.2 程序详细设计 (3)4、系统测试和使用说明 (5)4.1系统测试 (5)4.2系统使用说明 (8)5、课程设计总结 (8)5.1遇到的问题和解决方法 (8)5.2心得体会 (9)多线程与C/S综合应用——聊天系统1、课程设计概述我的JA V A聊天系统于2013年1月开始实施,持续时间为4天。

设计主要是利用所学的面向对象程序设计语言——JA VA来编写程序,实现特定功能,以加深对JA VA的理解。

设计之初只为学习,版权归冯武宝(sky)所有!未经许可,不得用于任何商业目的!2、课程设计题目描述我们设计的聊天系统能在一台电脑上实现一个用户对一个用户和一个用户对多个用户的信息交流。

为了实现这样的功能我们设计了服务器端和客户端,采用JA VA的多线程技术实现用户与用户之间的同步交流。

3、系统需求分析与设计3.1 系统需求分析随着网络通信技术、信息产业化的发展,越来越多的用户喜欢通过网络聊天工具来进行信息的交流。

为了满足用户的需求,本系统实现在一台计算机的两个用户或者多个用户之间的信息交流。

3.2 系统设计3.2.1 系统总体设计(1)系统功能分析本系统要用到以下的Java编程技术实现的功能:①多线程功能:当客户端要求与服务器端建立连接时,服务器端就将用到多线程功能,为每一个建立起来的连接创建一个线程。

这样计算机在处理时不需要消息队列,因为所有的线程都是相同的块的一个部分,并且可以共享。

这样的话程序比单线程模型和STA的执行速度都要快,因为降低了系统的负载,因而可以优化来减少系统处理的时间。

谢谢支持:/②图像显示功能:客户端用户之间的相互信息交流需要对话框来是想,这将由图像显示功能来完成。

JQQ即时通讯系统的设计与实现

JQQ即时通讯系统的设计与实现

本科生毕业论文(设计)论文(设计)题目:JQQ即时通讯系统的设计与实现学院:电子信息工程学院专业:网络工程年级:2007 级学生姓名:学号:导师及职称:日期:2011年5月5日JQQ即时通讯系统的设计与实现[摘要]运用Internet和Java开发技术,采用C/S模式,建立一个基于应用的即时通讯系统。

本系统实现了用户注册,用户登陆,分组管理,好友管理,查询用户,用户即时通讯,查看聊天记录等功能。

用户注册是通过系统来添加新的用户;用户登录用来验证用户的信息是否合法;分组管理功能主要是对分组的管理,如添加分组、删除分组等;好友管理功能主要是对好友的管理,如添加好友、删除好友等;查询用户是查询所有已注册的用户以便加为好友进行通讯;用户即时通讯使成为好友的双方可以即时在线交流;查看聊天记录保存了与好友通讯的所有记录。

[关键词]即时通讯系统;C/S模式;TCP;UDPJQQ instant messaging system design and ImplementationAbstract:The use of Internet and Java development technologies, using C / S mode, a real-time communication system based on application. The system implements user registration, user login, group administration, friends manage, query user, instant messaging, view the chat history. User registration is through the system to add new users; user login used to authenticate the user's information is legitimate; group management functions mainly for the management of groups, such as adding a group, delete group, etc.; friends management functions mainly for friends management, such as adding friends, remove friends, etc.; query the user is the query to all registered users to add as friends to communicate; users to instant messaging to become friends of the two sides can exchange real-time online; view chat history with a good save friends of the communication of all records.Key words: Instant messaging system; C / S mode; TCP; UDP目录1 绪论 (5)1.1项目背景 (5)1.2国内外研究现状 (6)1.3预期目标和经济效益 (6)1.4课题简要介绍 (7)1.5系统创新点 (7)2 需求分析 (8)2.1功能需求 (8)2.1.1 用户管理 (8)2.1.2 分组管理 (8)2.1.3 好友管理 (8)2.1.4 即时通讯 (9)2.2通讯模型的特点 (9)2.2.1 适用性 (9)2.2.2 扩展性 (10)2.3可行性研究 (10)2.3.1 技术可行性分析 (10)2.3.2 不确定性分析 (10)2.3.3 分析结论 (10)2.4运行环境 (11)3 概要设计 (11)3.1框架设计 (11)3.2拓扑结构 (11)3.3功能设计 (14)3.2.1 用户注册模块 (14)3.2.2 用户登录模块 (14)3.2.3分组管理模块 (15)3.2.4 好友管理模块 (15)3.2.5 查询用户模块 (16)3.2.6 即时通讯模块 (16)3.2.7 聊天记录模块 (17)3.4设计原则及一般要求 (17)4 系统设计 (17)4.1模块设计 (17)4.2即时通讯系统关系型数据库的实现 (17)4.2.1 数据库分析 (18)4.2.2 数据库概念设计 (18)4.2.3 数据库逻辑结构设计 (19)5 系统实现 (20)5.1注册模块 (20)5.2登录模块 (22)5.3分组管理模块....................................... 错误!未定义书签。

关于即时通讯软件QQ的UML课程设计

关于即时通讯软件QQ的UML课程设计

即时通信软件的统一建模1 、简介随着网络的发展,即时通信软件近年来很受网民们的青睐,本课程设计以腾讯公司的QQ作为建模参考,也仅对QQ客户端软件进行建模。

2 、功能需求及问题域分析QQ的用户(以下简称为用户)是使用QQ进行网上聊天的网民。

用户之间使用QQ进行即时聊天,网上留言,传送文件等等。

用户之间要进行通信,首先得加对方为好友或搭建临时对话框,而QQ号码是每个用户在网上的唯一标志。

为了使QQ能满足用户需要和友好的交互,系统建立以下子系统:即时聊天子系统、联系人管理子系统、群/讨论组子系统、系统消息子系统、状态设置子系统、系统设置子系统、安全中心子系统、网络游戏子系统。

3 、绘制usecase图用户是系统中唯一的活动者,各usecase是系统所提供的服务。

3.1图1 QQ初始界面usecase图说明:在QQ程序运行的初始界面,用户可以输入帐号和密码登录QQ,可以进入注册申请新QQ的服务系统,可以进入取回QQ密码的服务系统,可以退出QQ程序。

3.2图2 用户成功登录后的系统顶层usecase图说明:成功登录后,用户可以和特定好友进行即时聊天,可以对联系人进行管理操作,可以进行群组聊天,可以查看腾讯服务器系统发来的消息、新闻,可以对自己的在线状态进行设置,可以对本QQ的各方面进行系统设置,可以进入安全中心服务页面,可以进入各种腾讯游戏(前提是游戏已在本机上安装)。

3.3图3 即时聊天子系统usecase图说明:用户可以与对方进行文字聊天、视频会话、语音会话、传送文件、音乐分享,也可以发送QQ表情、查看对方资料、请求对方远程协助,也可以在本机上截屏。

3.4图4 联系人管理子系统usecase图说明:用户可以添加好友,可以删除好友,可以对好友进行分组管理,可以修改好友的备注名称,可以查看好友的个人资料。

3.5图5 系统设置子系统usecase图说明:用户可以进行基本设置,进行状态和提醒设置,可以进行好友和聊天设置,可以进行安全和隐私设置。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

软件分析软件名称:即时通讯系统:山寨QQ 开发人员: sky目录1、课程设计概述 (2)2、课程设计题目描述 (2)3、系统需求分析与设计 (2)3.1系统需求分析 (2)3.2系统设计 (2)3.2.1 系统总体设计 (2)3.2.2 程序详细设计 (3)4、系统测试和使用说明 (5)4.1系统测试 (5)4.2系统使用说明 (8)5、课程设计总结 (8)5.1遇到的问题和解决方法 (8)5.2心得体会 (9)多线程与C/S综合应用——聊天系统1、课程设计概述我的JA V A聊天系统于2013年1月开始实施,持续时间为4天。

设计主要是利用所学的面向对象程序设计语言——JA VA来编写程序,实现特定功能,以加深对JA VA的理解。

设计之初只为学习,版权归冯武宝(sky)所有!未经许可,不得用于任何商业目的!2、课程设计题目描述我们设计的聊天系统能在一台电脑上实现一个用户对一个用户和一个用户对多个用户的信息交流。

为了实现这样的功能我们设计了服务器端和客户端,采用JA VA的多线程技术实现用户与用户之间的同步交流。

3、系统需求分析与设计3.1 系统需求分析随着网络通信技术、信息产业化的发展,越来越多的用户喜欢通过网络聊天工具来进行信息的交流。

为了满足用户的需求,本系统实现在一台计算机的两个用户或者多个用户之间的信息交流。

3.2 系统设计3.2.1 系统总体设计(1)系统功能分析本系统要用到以下的Java编程技术实现的功能:①多线程功能:当客户端要求与服务器端建立连接时,服务器端就将用到多线程功能,为每一个建立起来的连接创建一个线程。

这样计算机在处理时不需要消息队列,因为所有的线程都是相同的块的一个部分,并且可以共享。

这样的话程序比单线程模型和STA的执行速度都要快,因为降低了系统的负载,因而可以优化来减少系统处理的时间。

谢谢支持:/②图像显示功能:客户端用户之间的相互信息交流需要对话框来是想,这将由图像显示功能来完成。

(2)系统技术方案由于要实现用户之间的信息交流,必须实现网络传输,就必须用到 饱中的ServerSocket和socket类还包括InetAdress和URL类等,对基本数据流进行读、写等操作。

为了实现信息交流的同步,我们引进了多线程,就要用到ng.Thread 类或ng.Runnable接口。

程序中要捕获异常,就要用到多种捕获异常类,这些类是在J2SE编程环境下自动引入的ng包的异常类。

3.2.2 程序详细设计(1)实现机制①多线程Java语言的多线程机制可以实现在后台程序中能够同时处理多个任务。

Java 中实现线程的方法有两种,第一种是生成Thread类的子类,并定义该子类的自己的run方法,线程的操作在run方法中实现。

要使线程实现预定功能,必须定义自己的run()方法。

线程间的通信使线程可以相互交流和等待。

通信的方式可以通过经常共享数据使线程互相交流,也可以用线程控制方法使线程互相等待。

②图像显示JFrame窗口是window的子类,因而具有window窗口的所有特性。

要显示图像,首先要将图片数据从网络或者将磁盘上装载于内存中,装载图像也就是创建一个Image对象。

创建Image图像通向通常不用它的构造方法,而是通过调用Applet类对象的方法来获得。

③Socket技术网络最基本的连接形式就是让两台计算机连接在一起,并且“交谈”或者“沟通”,一旦两台计算机都找到对方,就进行对话。

Socket中的Serversocket类的getIntAdress和getLocalPort方法可得到服务器的IP地址和端口。

④异常处理(2)程序框架本系统的程序框架主要包括服务器端和客户端两部分。

(3)代码设计客户端程序设计:ManageClientConServerThread类ManageClientConServerThread类定义了客户端与服务器端保持通信的线程类,以及如何在进行信息的交流。

它用线程来实现,意味着它是独立执行的。

ManageQqChat类ManageQqChat类是管理用户聊天界面的类,对用户聊天界面的设计都可以通过此类实现,可以加载图片等等ManageQqFriendList类ManageQqFriendList类是一管理好友列表,界面和黑名单的类。

在其中我们定义了一个私有的静态变量!QqClientCon类这个类是用来设计客户端连接服务器后台的类,首先我们发送一个请求,然后进行身份验证验证成功的话,就开始启动通信线程。

QqChat类这是管理好友聊天界面的类,在这里我们需要事件的监听,并发生事件反应,所以我们使用了ActionListener。

QqClientLogin类这个是用户登陆界面的类,在其中可以定义北部,中部和南部需要的组件,以及进行监听和处理。

服务器端程序设计:整合了三个JavaBeans类,对信息进行处理Message类信息内容储存类,这是存储信息的公共类。

MessageType类此类主要用来定义用户收发信息类型的类,通过此类可以改信息的类型。

User类这个主要是储存用户身份信息的类。

用户输入的身份信息,通过此类进行存储。

ManageClientThread 类这个主要是管理用户线程的类,在这里进行用户线程的处理。

MyQqServer这是服务器类刚开始他是出于监听状态,默认的是没有启动的,也就是没有建立连接当我们启动服务器他就开始建立连接。

SerConClientThread类这是客户端和服务器通信的线程,用这个类说明了在一段时间内使用的线程。

MyServerFrame类这是服务器的控制界面,通过这个界面我们可以完成服务器的启动和关闭。

谢谢支持:/4、系统测试和使用说明4.1 系统测试使用JDK运行程序时,将Qqserver子目录和Qqclient子目录下的程序都拷贝到当前目录中,并将存放有背景的放到当前目录中,谢谢支持:运行服务器程序QqServer.jar,启动服务器端,窗口显示如图所示:图1 服务器运行界面点击启动服务器,服务器开始启动运行第一个客户程序,QqClient.jar执行后,windows窗口会显示标题为山寨QQ的登录界面。

如图2所示:图2用户登录界面登陆成功以后现实以用户20为例如图3所示:图3客户程序的运行界面在两个客户端程序进行信息的交流的时候。

在这里以用户19和20为例如图4所示聊天界面发送文件界面4.2 系统使用说明在进行用户登录之前,我们首先启动服务器,然后从客户端进行登录,我们从中所使用的登录密码是123456 用户名是1到50之间,由于我们的技术有限所以没有设计数据库。

谢谢支持:/5、课程设计总结5.1 遇到的问题和解决方法在用JA VA编写程序时,我们遇到了很多困难,如怎样用Socket类实现客户端和服务器端的通信、怎样使用多线程来同时并行运行多个相对独立的线程、如何通过图形用户接口GUI来实现图像的显示以及如何捕获异常等。

通过查阅相关书籍以及在网上搜索资料,我们了解到要使用类中的MessageListenning来负责侦听客户端的消息,使用Thread类创建线程接收客户端发出的消息。

为了实现信息交流的同步,我们引进了多线程,这就要用到ng.Thread类或ng.Ruunable接口,在本系统中,我们用到了前者。

设计是以Java独立应用程序来实现的,当然要引用窗体类,对图像进行显示、定位等操作,包括以下几个类:javax.swing.JFrame、javax.swing.JPanel。

程序中要捕获异常,就要用到多种捕获异常类,这些类是在J2SE编程环境下自动引入的ng包类的异常类。

谢谢支持:/5.2 心得体会在这次的面向对象程序设计中,sky主要运用了JA VA语言的多线程、异常处理、画图、Socket技术、Swing控件、网络传输中的广播等,综合运用了JA VA语言。

虽然这个应用程序规模比较小,但设计中用到了许多JA VA功能和面向对象的编程思想。

我深刻感受到了面向对象语言中类库的强大功能,掌握了运用JA VA中的类实现某些基本功能,并学会了自己查询使用类的方法,为以后的面向对象语言的自学奠定了基础。

这次设计中,再一次让我感受到了网络通信中服务器和客户相互通信的特点,同时也加深了对网络通信知识的理解。

通过这次为时两周的课程设计,我学到了很多的东西,下面就这在这次课程设计中的心得体会总结如下:在这次的面向对象程序设计中,主要是运用JAV A语言来编写,并可运用其他的技术。

在我们的系统中,还采用了多线程、异常处理、画图、Socket技术、Swing控件、网络传输中的广播等技术,其中也涉及到了很多基本类的知识,而这些知识都是我们没有学过的,这就要求我们去查阅相关书籍和上网搜集相关的资料。

正因为这样,才锻炼了我的自学能力,为以后的学习打下了基础。

通过近一周的努力,这次课程设计圆满的结束了,在这个过程中,我学到了很多的知识,同时也犯过许多错误,也非常感谢张老师帮助与指导。

在以后的学习中,我会更加努力的学好专业知识,并将所学知识用于实践当中去,以便牢固掌握知识。

源码下载地址:/thread-12702-1-1.html- 10 -。

相关文档
最新文档