Java课程设计聊天室_第1页
Java课程设计聊天室_第2页
Java课程设计聊天室_第3页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java程序课程设计任务书JAVAM天室的系统的设计与开发1. 主要内容:用JAVA实现基于C/S模式的聊天室系统。聊天室分为服务器端和客户端两部分,服务器端程序主要负责侦听客户端发来的信息,客户端需要登陆到服务器端才可以实现正常的聊天功能。2. 具体要求(包括技术要求等):系统的功能要求:A. 服务器端主要功能如下:1. 在特定端口上进行侦听,等待客户端连接。2. 用户可以配置服务器端的侦听端口,默认端口为8888。3. 向已经连接到服务器端的用户发送系统消息。4. 统计在线人数。5. 当停止服务时,断开所有的用户连接。B. 客户端的主要功能如下:1. 连接到已经开启聊天服务的服务器端。2.

2、 用户可以配置要连接的服务器端的IP地址和端口号。3. 用户可以配置连接后显示的用户名。4. 当服务器端开启的话,用户可以随时登录和注销。5. 用户可以向所有人或某一个人发送消息。学习并掌握一下技术:JavaJavaBean等熟练使用一下开发工具:Eclipse,JCreator等实现系统上诉的功能。3. 进度安排:4. 12月28日12月29日:课程设计选题,查找参考资料12月30日1月1日:完成系统设计1月2日1月5日:完成程序代码的编写1月6日:系统测试与完善1月7日:完成课程设计报告,准备答辩主要参考文献:1.张广彬孟红蕊张永宝.Java课程设计(案例精编)M.活华大学出版社.2007

3、年版摘要在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,例如,国外的ICQ、国内腾讯公司开发的OICQ基于Java网络编程的强大功能,本次毕业设计使用Java编写一个聊天系统。一般来说,聊天工具大多数由客户端程序和服务器程序外加服务器端用于存放客户数据的数据库组成,本系统采用客户机/服务器架构模式通过Java提供的Soket类来连接客户机和服务器并使客户机和服务器之间相互通信,由于聊天是多点对多点的而Java提供的多线程功能用多线程可完成多点对多点的聊天,数据库管理系统用SQLServer2000完成并通过JDBC-ODBC访问数据库。本系统建

4、立在JAVA平台上,系统的设计使用了面向对象技术和面向对象的设计原则。系统采用C/S结构,客户端与客户端以及客户端与服务器端之间通过Socket传送消息。使用JAVA语言编写,开发工具采用Eclipse。服务器端设计与实现过程中,采用了多线程技术,可以在单个程序当中同时运行多个不同的线程,执行不同的任务。大大增强了程序对服务器资源的利用。聊天系统完成后将可进行多人对多人的聊天,对好友进行添加、删除,对新用户的注册,发送消息、接受消息等等功能。关键词:多线程;客户机/服务器;JAVA;Socket;Eclipse;TCP/IPJAVA程序课程设计任务书I摘要II.目录III第1章引言1441.1

5、RJ1.2课程设计内容1.3任务分工第2章聊天室系统32.1聊天室系统概述32.1.1聊天室系统的定义32.1.2聊天室系统的任务及目的32.2主要聊天室系统介绍42.3本意小结5第3章聊天室系统的设计63.1系统需求分析63.2系统开发及运行环境63.3系统主要功能要求63.4系统模块化分析73.4.1聊天室系统总体结构73.4.2聊天室系统各模块介绍83.5系统数据流图103.6本意小结10第4章系统的具体实现114.1界面设计114.1.1服务器启动界面图114.1.2服务器启动成功界面图124.1.3客户端界面图124.1.4用户设置界面图134.1.5用户成功登录界面图134.1.6

6、两人私聊界面图144.1.7多人群聊界面图144.2程序设计及调试运行144.2.1程序调试(以服务器为例)154.2.2JCreator204.3本意小结21第5章结束语22致谢23附录源代码24第1章引言1.1背景当今主流的聊天工具有QQICQ,MSNMessengeYahooMessenger等,国内最热门的当届QQ腾讯QQ(OICQ是由深圳市腾讯计算机系统公司开发的,基于Internet的即时寻呼软件。您可以使用QQM子友用户进行交流,信息即时发送,即时回复,收发及时、功能全面。此外QCS具有BP机网上寻呼、聊天室、传输文件、语音邮件、手机短讯服务等功能,QQ不仅仅是虚拟的网络寻呼机,

7、更可与传统的无线寻呼网、GS唯动电话的短消息系统互联,目前QQffi全国多家寻呼台、移动通信公司有业务合作。是国内不可多得的中文网络寻呼机。QQS持显示朋友在线信息、即时传送信息、即时交谈、即时发送文件和网址。QQ可以在Win95/98/NT/2000操作系统下运行,是十分灵活的网络寻呼工具。它会自动检查您是否已联网,如果您的电脑已连入Internet,可以搜索网友、显示在线网友,可以根据QC&、昵称、姓名、email地址等关键词来查找,找到后可加入到通讯录中。当您的通讯录中的网友在线时,QQ+朋友的头像就会显示在线,根据提示就可以发送信息,如果对方登记了寻呼机或开通了GSW机短消息,

8、即使离线了,您也可及时将信息传递给您的好友。虽然以上这些软件是免费的,并且功能越来越强大。但是它们的唯一的不足就是必须要联网或者下载到它们的服务端,要不然是没法脱离Intenet使用的。为了能在一个没有连接到Intenet的局域网使用聊天工具,那就必须要有服务器端。本系统就是包括服务器端与客户端,可以在局域网聊天的一个工具。1.2课程设计内容实现的是局域网中的聊天功能,运行服务程序后,服务器创建成功,然后使服务器对某一个设定的端口处于监听状态,当有客户端请求建立连接时,服务器就可接受请求,建立连接!这样服务器和客户端就可相互发送消息,实现聊天功能!系统的功能要求:A. 服务器端主要功能如下:1

9、. 在特定端口上进行侦听,等待客户端连接。2. 用户可以配置服务器端的侦听端口,默认端口为8888向已经连接到服务器端的用户发送系统消息。3. 统计在线人数。4. 当停止服务时,断开所有的用户连接。B. 客户端的主要功能如下:1. 连接到已经开启聊天服务的服务器端。2. 用户可以配置要连接的服务器端的IP地址和端口号。3. 用户可以配置连接后显示的用户名。4. 当服务器端开启的话,用户可以随时登录和注销。用户可以向所有人或某一个人发送消息1.3任务分工第2章聊天室系统2.1聊天室系统概述聊天室是一种基丁互联网的即时交流系统,最初是ICQ,也称网络寻呼机。此类软件使得人们可以运用连上INTERN

10、ETS的电脑用户可以随时跟另外一个在线网民交谈,甚至可以通过视频看到对方的适时图像。使人们不必担心昂贵的话费而畅快交流,并工作、交流两不误。2.1.1聊天室系统的定义聊天时系统是通过即时通讯技术来实现在线聊天、交流的软件。目前有2种架构形式,1、一种是C/S架构,采用客户端/服务器形式,用户使用过程中需要下载安装客户端软件,典型的代表有:QQ、白度HI、SkypeQQVSGU、Gtalk、新浪UC、MSN等;2、采用B/S架构,即浏览器/服务端形式,这种形式的即时通讯软件,直接借助互联网为媒介、客户端无需安装任何软件,既可以体验服务器端进行沟通对话,一般运用在电子商务网站的服务商,典型的代表有

11、Websitelive、53KF、live800等。2.1.2聊天室系统的任务及目的本系统主要通过客户端,服务器端来体现聊天系统的基本功能。(1) 服务器端1. 处理用户注册2. 处理用户登录3. 处理用户发送信息,服务器监控聊天内容,服务器过滤非法内容4. 处理用户得到信息5. 处理用户退出8. 服务器踢人。9. 保存服务器日志。10. 保存用户聊天信息。客户端用户注册界面及结果用户登录界面及结果用户发送信息界面及结果用户得到信息界面及结果用户退出界面及结果2.2主要聊天室系统介绍目前国内外做聊天系统的公司很多,产品也琳琅满目,国内有诸如腾讯QQ、新浪UC、网易泡泡等,国外有著名的MSN(新

12、版改名为LiveMessenger)以及跨平台Gaim等。本人取最具代表性的QQ和MSN进行了一些研究,作为我开发聊天系统的准备。腾讯无疑是国内即时通讯市场的霸主,自从99年进入即时通讯领域并迅速占市场之后,其在国内用户数量始终高居榜首,即使近几年面对微软MSN的强大攻势,腾讯QQ的时常占有率依然稳步增长。腾讯的成功与其对QQ的不断创新和完善是分不开的。参考了许多网络上的资料,以及自己通过观察腾讯QQ运行时的各种细节。可以确定腾讯QQ是以多服务器提供服务、服务器总控客户端、客户端之间UDP直连通信的。并且在两个客户端之间不能建立直连的情况下,才由服务器进行中转通信。其模型如图1-1与腾讯QQ不

13、同,微软的MSNMessenger只使用了TCP作为传输层通信协议,所有客户端与服务器进行连接,然后通过与服务器的TCP连接进行中转通信。其模型如图1-2腾讯使用的模型中,服务器主要处理客户端各种状态的控制,可以极大减轻服务器的处理压力,但其内部协议和实现复杂度都较高。而MSNMessenger所有数据都要经过服务器,服务器压力可想而知(难怪平时很少见到使用MSN进行语音视频聊天的)。2.3本章小结这一章介绍了当前聊天室系统应该具备的功能模块,并提供了市面上比较流行的聊天室系统作为参考。在这一章中,我们可以了解什么是聊天室系统,当前聊天室系统的市场需求,还有一个聊天室系统应该的开发目标。第3章

14、聊天室系统的设计这一章是聊天室系统的设计,从系统需求分析开始,介绍开发环境和用到的开发工具,系统主要的功能设计,系统的数据流程图。3.1系统需求分析聊天室的设计目标:通过做巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、JCreator等开发工具的运用,拓宽常用类库的应用,用JAVA实现基于C/S模式的聊天室系统。3.2系统开发及运行环境硬件平台:CPU:Pentium2.8GHz以上。内存:256MB以上。软件平台:操作系统:WindowsXP。运行环境:JDKVersion1.6JCreator3.3系统主要功能要求本系统针对局域网进行联机聊天。聊天室分为服务器端和客

15、户端两部分,服务器端程序主要负责侦听客户端发来的信息,客户端需要登陆到服务器端才可以实现正常的聊天功能。本系统主要实现如下功能:服务器:在特定端口上进行侦听,等待客户端连接。用户可以配置服务器端的侦听端口,默认端口为8888。向已经连接到服务器端的用户发送系统消息。统计在线人数。当停止服务时,断开所有的用户连接。系统运行稳定、安全可靠。一台主机只能启动一个服务器。客户端:连接到已经开启聊天服务的服务器端。用户可以配置要连接的服务器端的IP地址和端口号用户可以配置连接后显示的用户名。用户可以更改聊天时的表情。当服务器端开启后,用户可以随时登录和注销。用户可以向所有人或某一个人发送消息。系统运行稳

16、定、安全可靠。可以默认连接到自己主机启动的服务器。3.4系统模块化分析3.4.1聊天室系统总体结构主要功能框架如下图所示:各功能模块实现的功能为:服务器:端口设置:设置倾听的端口号,默认为8888。启动服务:开启倾听端口,允许客户端连接。系统消息:服务器启动后可以在聊天室内发送消息。停止服务:关闭倾听端口,中断所有客户端的连接。退出:关闭服务器。客户端:用户设置:设置聊天时显示的名称,默认为匆匆过客。连接设置:设置要连接的服务器所在主机的IP地址和倾听端口登录:连接服务器。发送消息:进行聊天,可单独发送消息给聊天室中的一个人。注销:与服务器断开连接。退出:关闭客户端。3.4.2聊天室系统各模块

17、介绍勃天室服亦1服务悝)帮助(址壹g口设置启动腮旁L'''僖IMG辑施聊天模块可以向聊天室内所有人或个人发送系统消息或以管理员身份与其他人聊天服务器包含服务、帮助、聊天三大模块,其中服务模块包含端口设置、启动服务、停止服务和退出四个小模块表3-1服务器各模块名称功能汇总表模块名基本功能1端口设置设置倾听的端口号,默认为8888。2启动服务开启倾听端口,允许客户端连接。3停止服务关闭倾听端口,中断所有客户端的连接。4退出关闭服务器。5帮助显示各个模块的功能及操作方法。6发送向聊天室内发送系统消息。n操福河设®(C)帮助但)用户谖置连接设置登录原销Ilisal客户

18、端包含操作、设置、帮助、聊天四大模块,其中操作包含用户登录、用户注销和退出三个小模块,设置包含用户设置和连接设置两个小模块聊天模块除具备普通聊天功能外,还能进行聊天时的表情选择表3-2客户端各模块名称功能汇总表模块名基本功能1用户设置设置聊天时显示的名称,默认为匆匆过客。2连接设置设皿连接的服务器所在主机的IP地址和倾听端口。3用户登录连接到服务器端。4用户注销与服务器断开连接。5退出关闭客户端。6发送发送聊天内容7悄悄话聊天内容不会被服务器和说话对象以外的人看到3.5系统数据流图系统数据流图3.6本章小结本章是聊天室系统的具体设计过程,有具体的需求分析、系统功能模块、系统数据流图。这里我们开

19、始接触聊天室系统开发的最初步骤,也是很重要的一步第4章系统的具体实现界面是系统之间最直接的交互界面,界面的友好性体现了软件设计的质量并在很大程度上决定了软件是否成功。4.1界面设计4.1.1服务器启动界面图4.1.2服务器启动成功界面图-K王还用痉村rL=:1f漂口洋布JQEIK若无U阳黄|燕'±"措I;土II.-4.1.3客户端界面图4.1.4用户设置界面图4.1.5用户成功登录界面图4.1.6两人私聊界面图*fi-L!Aii«|H>INiffB'1景1u9但H垢您*仲宇讪1曲通左也1中弟彳。耳坤HgtsdzeI盼*£蜘隼|客.I

20、MKNH-岬“FIMO和方g亩吐:m&tilg德tintafop”dWHushmtJ*M*«5i!ZS«tMf"1伶UlfEEli魂衬W?»ii'b球HLH:|屹UW卜陶整十£Mi_:蛔taW-妍WCIB-UMbAM:M!;|祉在灿”A4.1.7多人群聊界面图皿£20WtPV«SlfiRS177OF'I-UBD3EVfliu4-lQU岫Ul»f机!.it惨仰iiEtaiNt-iQinSlLI«*«!NwsyE-n.IMM加国白di-MW*!1JI三愕孕蝴丽育,01d&am

21、p;audMt训fUJU国!御席5i旧拒1皆H.弟*AZWdM-HaS够坦1HKA编.*8或阵4.3帑呻徐44M*'上Mrai*ILi&XM*1A*虹4=tTK±MmL-5.住谊避上上炉;向佛7日二炉的77所"".is三岬垮皓的.房dmuhNiPiAQa-*MihA垃也土义斐曜前.*”员寻TPOCIt中igl机购"*EtviffltfiAhng|$F加,aranwr书&诲(tasdatdA*Hmanbnn(AWHVM4河度善耳B"T”鼻阳盗由勺便"IT:曲七询【悴靖矿祈L浪/雨惘廿峋>>.闻4慢至馈

22、W毋£帆堆匚的LSUMt£4LiwatfTi1EVWWV1I4£«4lifcT:WlA质碑叩I足啊尸i人4.2程序设计及调试运行利用JCreator“一次编写,各处运行”的编程优点,按功能模块结构设计菜单,布置各明细模块工作界面,编写各个模块的程序代码,进行编译连接运行,经过反复调试修改,以达到系统功能要求。这个过程具有大量的工作量,应仔细对每个程序细节进行分析思考、编写程序并调试,做到程序简洁活楚,尽量避免可能潜在的程序错误,并在必要的地方加以注释,以便丁程序阅读和修改。4.2.1程序调试(以服务器为例)importjava.awt.*;importj

23、ava.awt.event.*;importjavax.swing.*;importjavax.swing.event.*;.*;importjava.io.*;/*聊天服务端的主框架类*/publicclassChatServerextendsJFrameimplementsActionListenerpublicstaticintport=8888;/服务端的侦听端口ServerSocketserverSocket;/服务端SocketImageicon;/程序图标JComboBoxcombobox;/选择发送消息的接受者JTextAreamessageShow;/服务端的信息显示JScr

24、ollPanemessageScrollPane;/信息显示的滚动条JTextFieldshowStatus;/显示用户连接状态JLabelsendToLabel,messageLabel;JTextFieldsysMessage;/服务端消息的发送JButtonsysMessageButton;/服务端消息的发送按钮UserLinkListuserLinkList;/用户链表/建立菜单栏JMenuBarjMenuBar=newJMenuBar();/建立菜单组JMenuserviceMenu=newJMenu("服务(V)");/建立菜单项端口设置(P)");启

25、动服务(S)");停止服务(T)”);退出(X)”);JMenultemportitem=newJMenultem("JMenultemstartitem=newJMenultem("JMenultemstopitem=newJMenultem("JMenultemexititem=newJMenultem("JMenuhelpMenu=newJMenu("帮助(H)");JMenultemhelpitem=newJMenultem("帮助(H)”);/建立工具栏JToolBartoolBar=newJToolBa

26、r();/建立工具栏中的按钮组件启动服务端侦听启动服务端侦听关闭服务端侦听退出按钮JButtonportSet;/JButtonstartServer;/JButtonstopServer;/JButtonexitButton;/框架的大小DimensionfaceSize=newDimension(400,600);ServerListenlistenThread;JPaneldownPanel;GridBagLayoutgirdBag;GridBagConstraintsgirdBagCon;/*服务端构造函数*/publicChatServer()init();/初始化程序/添加框架的关

27、闭事件处理this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.pack();/设置框架的大小this.setSize(faceSize);/设置运行时窗口的位置DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();this.setLocation(int)(screenSize.width-faceSize.getWidth()/2,(int)(screenSize.height-faceSize.getHeight()/2);this.setResizabl

28、e(false);this.setTitle("聊天室服务端");/设置标题/程序图标icon=getImage("icon.gif");this.setIconImage(icon);/show();/为服务菜单栏设置热键V'serviceMenu.setMnemonic('V');/为端口设置快捷键为ctrl+pportItem.setMnemonic('P');portItem.setAccelerator(KeyEvent.VK_P,InputEvent.CTRL_MASK);/为启动服务快捷键为ctrl+

29、sstartItem.setMnemonic('S');startItem.setAccelerator(KeyEvent.VK_S,InputEvent.CTRL_MASK);/为端口设置快捷键为ctrl+TstopItem.setMnemonic('T');stopItem.setAccelerator(KeyEvent.VK_T,InputEvent.CTRL_MASK);/为退出设置快捷键为ctrl+xexitItem.setMnemonic('X');exitItem.setAccelerator(KeyEvent.VK_X,Input

30、Event.CTRL_MASK);/为帮助菜单栏设置热键'H'helpMenu.setMnemonic('H');/为帮助设置快捷键为ctrl+phelpItem.setMnemonic('H');helpItem.setAccelerator(KeyEvent.VK_H,InputEvent.CTRL_MASK);/*程序初始化函数*/设置程序图标(KeyStroke.getKeyStroke(KeyStroke.getKeyStroke(KeyStroke.getKeyStroke(KeyStroke.getKeyStroke(KeyStro

31、ke.getKeyStrokepublicvoidinit()(ContainercontentPane=getContentPane();contentPane.setLayout(newBorderLayout();/添加菜单栏serviceMenu.add(portItem);serviceMenu.add(startItem);serviceMenu.add(stopItem);serviceMenu.add(exitItem);jMenuBar.add(serviceMenu);helpMenu.add(helpItem);jMenuBar.add(helpMenu);setJMen

32、uBar(jMenuBar);/初始化按钮portSet=newJButton("端口设置");startServer=newJButton("启动服务");stopServer=newJButton("停止服务");exitButton=newJButton("退出");/将按钮添加到工具栏toolBar.add(portSet);toolBar.addSeparator();/添加分隔栏toolBar.add(startServer);toolBar.add(stopServer);toolBar.addSep

33、arator();/添加分隔栏too旧ar.add(exitButton);contentPane.add(toolBar,BorderLayout.NORTH);/初始时,令停止服务按钮不可用stopServer.setEnabled(false);stopItem.setEnabled(false);/为菜单栏添加事件监听portItem.addActionListener(this);startItem.addActionListener(this);stopItem.addActionListener(this);exitItem.addActionListener(this);hel

34、pItem.addActionListener(this);/添加按钮的事件侦听portSet.addActionListener(this);startServer.addActionListener(this);stopServer.addActionListener(this);exitButton.addActionListener(this);combobox=newJComboBox();combobox.insertItemAt("所有人",0);combobox.setSelectedIndex(0);messageShow=newJTextArea();m

35、essageShow.setEditable(false);/添加滚动条messageScrollPane=newJScrollPane(messageShow,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);messageScrollPane.setPreferredSize(newDimension(400,400);messageScrollPane.revalidate();showStatus=newJTextField(35);showStatus.setEdi

36、table(false);sysMessage=newJTextField(24);sysMessage.setEnabled(false);sysMessageButton=newJButton();sysMessageButton.setText("发送");/添加系统消息的事件侦听sysMessage.addActionListener(this);sysMessageButton.addActionListener(this);sendToLabel=newJLabel("发送至:");messageLabel=newJLabel("发

37、送消息:”);downPanel=newJPanel();girdBag=newGridBagLayout();downPanel.setLayout(girdBag);girdBagCon=newGridBagConstraints();girdBagCon.gridx=0;girdBagCon.gridy=0;girdBagCon.gridwidth=3;girdBagCon.gridheight=2;girdBagCon.ipadx=5;girdBagCon.ipady=5;JLabelnone=newJLabel("");girdBag.setConstraints

38、(none,girdBagCon);downPanel.add(none);girdBagCon=newGridBagConstraints();girdBagCon.gridx=0;girdBagCon.gridy=2;girdBagCon.insets=newInsets(1,0,0,0);girdBagCon.ipadx=5;girdBagCon.ipady=5;girdBag.setConstraints(sendToLabel,girdBagCon);downPanel.add(sendToLabel);girdBagCon=newGridBagConstraints();girdB

39、agCon.gridx=1;girdBagCon.gridy=2;girdBagCon.anchor=GridBagConstraints.LINE_START;girdBag.setConstraints(combobox,girdBagCon);downPanel.add(combobox);girdBagCon=newGridBagConstraints();girdBagCon.gridx=0;girdBagCon.gridy=3;girdBag.setConstraints(messageLabel,girdBagCon);downPanel.add(messageLabel);gi

40、rdBagCon=newGridBagConstraints();girdBagCon.gridx=1;girdBagCon.gridy=3;girdBag.setConstraints(sysMessage,girdBagCon);downPanel.add(sysMessage);girdBagCon=newGridBagConstraints();girdBagCon.gridx=2;girdBagCon.gridy=3;girdBag.setConstraints(sysMessageButton,girdBagCon);downPanel.add(sysMessageButton);

41、girdBagCon=newGridBagConstraints();girdBagCon.gridx=0;girdBagCon.gridy=4;girdBagCon.gridwidth=3;girdBag.setConstraints(showStatus,girdBagCon);downPanel.add(showStatus);contentPane.add(messageScrollPane,BorderLayout.CENTER);contentPane.add(downPanel,BorderLayout.SOUTH);/关闭程序时的操作this.addWindowListener

42、(newWindowAdapter()publicvoidwindowClosing(WindowEvente)stopService();System.exit(0););/*事件处理*/publicvoidactionPerformed(ActionEvente)Objectobj=e.getSource();if(obj=startServer|obj=startItem)/启动服务端startService();elseif(obj=stopServer|obj=stopItem)/停止月艮务端intj=JOptionPane.showConfirmDialog(this,"

43、真的停止服务吗?",”停止服务",JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);if(j=JOptionPane.YES_OPTION)stopService();elseif(obj=portSet|obj=portItem)/端口设置/调出端口设置的对话框PortConfportConf=newPortConf(this);portConf.show();elseif(obj=exitButton|obj=exitItem)/退出程序intj=JOptionPane.showConfirmDialog(this

44、,"真的要退出吗?”,”退出”,JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);if(j=JOptionPane.YES_OPTION)stopService();System.exit(0);elseif(obj=helpitem)(/菜单栏中的帮助/调出帮助对话框HelphelpDialog=newHelp(this);helpDialog.show();elseif(obj=sysMessage|obj=sysMessageButton)(/发送系统消息sendSystemMessage();/*启动服务端*/publi

45、cvoidstartService()(try(serverSocket=newServerSocket(port,10);messageShow.append("服务端已经启动,在"+port+"端口侦听.n");startServer.setEnabled(false);startitem.setEnabled(false);portSet.setEnabled(false);portitem.setEnabled(false);stopServer.setEnabled(true);stopitem.setEnabled(true);sysMess

46、age.setEnabled(true);catch(Exceptione)(/System.out.println(e);userLinkList=newUserLinkList();listenThread=newServerListen(serverSocket,combobox,messageShow,showStatus,userLinkList);listenThread.start();/*关闭服务端*/4.2.2JCreatorJcreator是一个用于Java程序设计的集成开发环境,具有编辑、调试、运行Java程序的功能。当前最新版本是Jcreator3.1Q它乂分为LE和P

47、ro版本。LE版本功能上受到一些限制,是免费版本。Pro版本功能最全,但这个版本是一个共享软件。这个软件比较小巧,对硬件要求不是很高,完全用C+写的,速度快、效率高。具有语法着色、代码自动完成、代码参数提示、工程向导、类向导等功能。第一次启动时提示设置JavaJDK主目录及JDKJavaDocB录,软件自动设置好类路径、编译器及解释器路径,还可以在帮助菜单中使用JDKHelp。4.3本章小结本意介绍了系统的具体实现和部分关键代码,其中包括用户登录所要用到的函数和主界面的框架设计。第5章结束语本文讨论了如何利用JAVA技术开发聊天室系统,基本满足了结构化、界面友好、速度快、安全性以及稳定性等特点

48、。系统着重研究并实现了网络应用的部分。根据实现的情况看,具有较友好的聊天界面生成效果,以及流畅的网络通信效果。生成的聊天室可以达到基本的聊天要求,具有较高的研究价值。系统具有目前聊天室的基本功能:包括支持语气选择,支持私聊,可以给所有聊友发公共信息,具有速度快,高稳定性,占用系统资源少,用户界面友好等特点。通过毕业设计,发现自己在理论研究和实际工作能力等方面都得到了提高,受益匪浅,同时在老师的指导和课题组同学的共同帮助下,及时总结研究成果,这些无疑会对我今后的工作和学习带来很大的帮助。致谢附录源代码importjava.awt.*;importjava.awt.event.*;importja

49、vax.swing.*;importjavax.swing.event.*;.*;importjava.io.*;/*聊天服务端的主框架类*/publicclassChatServerextendsJFrameimplementsActionListenerpublicstaticintport=8888;/服务端的侦听端口ServerSocketserverSocket;/月艮务端SocketImageicon;/程序图标JComboBoxcombobox;/选择发送消息的接受者JTextAreamessageShow;/艮务端的信息显示JScrollPanemessageScrollPan

50、e;/信息显示的滚动条JTextFieldshowStatus;/显示用户连接状态JLabelsendToLabel,messageLabel;JTextFieldsysMessage;/月艮务端消息的发送JButtonsysMessageButton;/服务端消息的发送按钮UserLinkListuserLinkList;/用户链表/建立菜单栏JMenuBarjMenuBar=newJMenuBar();/建立菜单组JMenuserviceMenu=newJMenu("服务(V)”);/建立菜单项JMenultemportitem=newJMenultem("端口设置(P

51、)");JMenultemstartitem=newJMenultem("启动服务(S)");JMenultemstopitem=newJMenultem("停止服务(T)”);JMenultemexititem=newJMenultem("退出(X)");JMenuhelpMenu=newJMenu("帮助(H)");JMenultemhelpitem=newJMenultem("帮助(H)");/建立工具栏JToolBartoolBar=newJToolBar();/建立工具栏中的按钮组件J

52、ButtonportSet;/启动服务端侦听JButtonstartServer;/启动服务端侦听JButtonstopServer;/关闭服务端侦听JButtonexitButton;/退出按钮框架的大小DimensionfaceSize=newDimension(400,600);ServerListenlistenThread;JPaneldownPanel;GridBagLayoutgirdBag;GridBagConstraintsgirdBagCon;/*服务端构造函数*/publicChatServer()init();/初始化程序/添加框架的关闭事件处理this.setDefa

53、ultCloseOperation(JFrame.EXIT_ON_CLOSE);this.pack();设置框架的大小this.setSize(faceSize);设置运行时窗口的位置DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();this.setLocation(int)(screenSize.width-faceSize.getWidth()/2,(int)(screenSize.height-faceSize.getHeight()/2);this.setResizable(false);this.setTi

54、tle("聊天室服务端");/设置标题程序图标icon=getImage("icon.gif");this.setIconImage(icon);/设置程序图标show();为服务菜单栏设置热键V'serviceMenu.setMnemonic('V');为端口设置快捷键为ctrl+pportItem.setMnemonic('P');portItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK);/为启动服务快捷

55、键为ctrl+sstartItem.setMnemonic('S');startItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK);为端口设置快捷键为ctrl+TstopItem.setMnemonic('T');stopItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T,InputEvent.CTRL_MASK);为退出设置快捷键为ctrl+xexitItem.setMnemonic('

56、X');exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK);为帮助菜单栏设置热键H'helpMenu.setMnemonic('H');/为帮助设置快捷键为ctrl+phelpItem.setMnemonic('H');helpItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H,InputEvent.CTRL_MASK);/*程序初始化函数*/publicvoidinit(

57、)ContainercontentPane=getContentPane();contentPane.setLayout(newBorderLayout();添加菜单栏serviceMenu.add(portItem);serviceMenu.add(startItem);serviceMenu.add(stopItem);serviceMenu.add(exitItem);jMenuBar.add(serviceMenu);helpMenu.add(helpItem);jMenuBar.add(helpMenu);setJMenuBar(jMenuBar);初始化按钮portSet=newJ

58、Button("端口设置");startServer=newJButton("启动服务");stopServer=newJButton("停止服务”);exitButton=newJButton("退出”);将按钮添加到工具栏toolBar.add(portSet);toolBar.addSeparator();/添加分隔栏toolBar.add(startServer);toolBar.add(stopServer);toolBar.addSeparator();/添加分隔栏toolBar.add(exitButton);contentPane.add(toolBar,BorderLayout.NORTH);初始时,令停止服务按钮不可用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论