Java聊天室.docx
- 文档编号:9572874
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:13
- 大小:196.06KB
Java聊天室.docx
《Java聊天室.docx》由会员分享,可在线阅读,更多相关《Java聊天室.docx(13页珍藏版)》请在冰点文库上搜索。
Java聊天室
JIANGXIAGRICULTURALUNIVERSITY
JAVA课程设计报告
题目:
JAVA聊天室
学院:
软件学院
姓名:
杨虹
学号:
20102033
专业:
软件开发加英语
年级:
2010级
指导教师:
易文龙
二011年12月
1、系统需求分析
1.引言
1.1编写目的:
可行性研究的目的是为了对问题进行研究,以最小的代价在最短时间内确定问题是否可解。
经过对此项目进行详细调查研究,初拟系统实现报告,对软件开发中将要面临的问题及其解决问题方案进行初步设计和合理安排,明确开发风险。
1.2项目背景:
在当今信息时代,越来越多的聊天工具被应用,java语言是当今流行的网络编程语言,它具有面向对象,与平台无关,安全,多线程等特点。
使用java语言不仅可以实现大型企业级的分布式应用系统,还能够为小型的嵌入式设备进行应用程序的开发。
面向对象的开发是当今世界最流行的开发方法,它不仅具有更贴近自然地语义,而且有利于软件的维护和继承,锻炼我们熟练地应用面向对象的思想和设计方法解决实际问题的能力。
此次设计的题目为聊天室,可以巩固多学的java语言基础知识,增进java语言的编辑基本功,拓宽常用类库的应用,使我们通过教学环节与手段,把所学的课程及相关知识加以融会贯通,全面掌握java
语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。
2.可行性研究的前提
2.1要求
2.1.1主要功能:
1)可以实现群聊的功能
2)可以实现对注册人员的管理
2.1.2性能要求:
注册人员变动的信息必须在允许的时间内放映在各个客户端,对注册人员的信息必须无差错的存储在服务器上。
对服务器上的数据必须进行及时正确的刷新。
2.1.3输出要求:
数据完整,详实。
2、系统总体设计
运用java程序编写聊天室,实现简单的聊天功能。
它是图形界面,线程,流与文件系统等技术的综合应用。
其界面主要采用了java.awt包,java.swing包,java.io包java.util包,等。
程序实现了聊天室的基本功能,其中有:
(1)登录聊天室(进入聊天室必须输入ip和port,).
(2)在文本中保留所有聊天记录。
(3)用户应该可以看到所有在线的其它用户,并和该用户聊天。
3、系统详细设计
程序中引入的包:
importjava.util.*;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
import.*;
importjava.io.*;;
界面设计:
聊天室界面大小为500*500;
布局:
进入聊天室主界面之前有一个登陆对话框。
其中包括服务器ip,port(端口)的填写。
聊天室的主界面主要分为三个大容器,中间是JTextArea文本区域,显示聊天信息。
南部是一个控制界面,包括刷新按钮、发送按钮、聊天信息输入框,以及一句开心语:
你孤单吗寂寞了,那就进来杨虹的聊天室吧。
系统结构:
主要由一个主类zero,和一个main函数
主要类:
zero:
继承JFrame类实现ActionListener和Runnable接口
主要对象:
privateJTextAreata;
privateJTextFieldip;
privateJTextFieldport;
privateJButtonbtn_server;
privateJButtonbtn_client;
privateJTextFieldsend_text;
privateJButtonbtn_send;
privateJButtonrefresh;
privateJButtonb1;
privateJLabeltext;
privateJComboBoxc;
privateSocketskt;
包括的方法:
publicvoidrun()
publicvoidactionPerformed(ActionEvente)
publicvoiddoServer()
publicvoiddoClient()
publicvoiddoSend()
还有一个构造方法zero
详细代码如下:
importjava.util.*;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
import.*;
importjava.io.*;
publicclassZeroextendsJFrameimplementsActionListener,Runnable{
privateJTextAreata;
privateJTextFieldip;
privateJTextFieldport;
privateJButtonbtn_server;
privateJButtonbtn_client;
privateJTextFieldsend_text;
privateJButtonbtn_send;
privateJButtonrefresh;
privateJButtonb1;
privateJLabeltext;
privateJComboBoxc;
privateSocketskt;
publicvoidrun(){
try{
BufferedReaderbr=newBufferedReader(newInputStreamReader(skt.getInputStream()));
while(true){
Strings=br.readLine();
if(s==null)break;
ta.append(s+"\n");
}
}
catch(Exceptione){
e.printStackTrace();
}
}
publicvoidactionPerformed(ActionEvente)
{
if(e.getSource()==btn_server){
doServer();
}
if(e.getSource()==btn_client){
doClient();
}
if(e.getSource()==btn_send){
doSend();
}
}
publicvoiddoServer(){
try{
ServerSocketserver=newServerSocket(Integer.parseInt(port.getText()));
//ta.append("服务器正在"+port.getText()+"监听");
//System.out.println("服务器正在"+port.getText()+"监听");
skt=server.accept();
ta.append("连接成功!
\n");
newThread(this).start();
}
catch(Exceptione){
ta.append("服务器连接失败!
\n");
}
}
publicvoiddoClient(){
try{
skt=newSocket(ip.getText(),Integer.parseInt(port.getText()));
ta.append("连接成功!
\n");
newThread(this).start();
}
catch(Exceptione){
ta.append("连接失败!
\n");
}
}
publicvoiddoSend(){
try{
PrintWriterpw=newPrintWriter(skt.getOutputStream());
Strings=send_text.getText();
if(s==null)return;
Calendara=Calendar.getInstance();
inty=a.get(a.YEAR);
intm=a.get(a.MONTH);
intd=a.get(a.DAY_OF_MONTH)+1;
Stringt=newString(y+":
"+m+":
"+d);
//System.out.println(t+s+"\t对方对你说:
");
pw.append(t+"\t对方对你说:
\n");
pw.println(s);
pw.flush();
}
catch(Exceptione){
ta.append("发送失败!
\n");
}
}
publicZero(){
this.setTitle("这是杨虹的聊天室!
");
this.setBounds(500,500,500,500);
Containercc=this.getContentPane();
JPanelp1=newJPanel();
cc.add(p1,BorderLayout.NORTH);
p1.setBackground(newColor(200,200,250));
ta=newJTextArea();
cc.add(ta,BorderLayout.CENTER);
JPanelp2=newJPanel();
cc.add(p2,BorderLayout.SOUTH);
p1.add(newJLabel("IP:
"));
ip=newJTextField("127.0.0.1",10);
p1.add(ip);
p1.add(newJLabel("Port:
"));
port=newJTextField("7777",4);
p1.add(port);
btn_server=newJButton("侦听");
btn_server.setForeground(newColor(255,0,0));
p1.add(btn_server);
btn_client=newJButton("连接");
btn_client.setForeground(newColor(255,0,0));
p1.add(btn_client);
p1.add(newJLabel("字体"));
c=newJComboBox(newString[]{"黑体","宋体","华文新魏"});
p1.add(c);
b1=newJButton(newImageIcon("29.gif"));
p1.add(b1);
p2.setLayout(newBorderLayout());
send_text=newJTextField("美女/帅哥,来聊天吧!
");
p2.add(send_text,BorderLayout.CENTER);
btn_send=newJButton("发送");
p2.add(btn_send,BorderLayout.EAST);
refresh=newJButton("刷新列表");
p2.add(refresh,BorderLayout.WEST);
p2.add(newJLabel("你孤单吗寂寞了,那就进来杨虹的聊天室吧"),BorderLayout.SOUTH);
p2.setBackground(newColor(100,100,100));
btn_server.addActionListener(this);
btn_client.addActionListener(this);
btn_send.addActionListener(this);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
publicstaticvoidmain(String[]args){
newZero().setVisible(true);
}
}
注:
代码发现的错误及改正:
1.由于加了带图片的Button,导至界面无法显示连接成功或者失败;
改正:
将B带图片的Button注释掉,使用标签JLabel
2.在设计字体颜色时
btn_server.setFrontground(newColor(255,0,0))应该改为
btn_server.setForeground(newColor(255,0,0))同理
btn_client.setFrontground(newColor(255,0,0))也应该为
btn_client.setForeground(newColor(255,0,0))
3.界面的最大化会使图片发生改变因而加入this.setResizable(false)即窗口不允许缩放;
四、测试
打开两个doc界面,输入javacZero.java
JavaZero
弹出界面,输入ip:
127.0.0.1
port:
7777
一个界面按下监听,另一个按下连接
界面如下:
你可以选择字体:
黑体,宋体,华文新魏
五、小结
Java聊天室的构建可以在网络上自动完成。
这样一来,只要运行了该代码就可以进行多人聊天,这样大大减少了话费,具有可观的实用性与经济性。
本文从对系统的分析到设计再到实现,最后到测试进行了系统的描述。
整个过程严格按照软件工程的原则进行。
该系统基本实现了需求分析中的功能要求。
由于时间和技术水平的原因,本系统还有许多待完善的地方。
例如对用户输入数据完整性检验的提高,提高系统的安全性,稳定性等。
还需要对本系统进行更进一步的完善。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 聊天室