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

下载本文档

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

文档简介

1、Java之聊天室制作总结报告姓名_赵其国学号_2班 级嵌入式一班二o二年十二月二十日一,设计目的为了更好的巩固输入输出流,窗体设计,多线程运用,网络通信设计方面的知识。把所学的课程及相关知识加 以融会贯通。二,设计内容设计的聊天室能实现用户登录,显示登录用户列表,以及发送聊天信息和显示聊天信息的功能。并可以选择接收信息的用户进行单发或群发的功能,运行程序,登录服务器后,可以从列表中选 择单个或多个用户进行聊天,它是图形界面,线程,流和文件系统等技术的综合使用。三,概要设计实现的功能:1,启动服务器端,接收客户端发来的信息,并在服务器端窗体显示客户端聊天信息,再吧信息返给在线用户, 窗体背景色为

2、粉色2,启动客户端窗体,窗体背景色为粉色3,用户名编辑框输入用户名,设置字体显红色,单击登录按钮,在显示在线用户列表内显示用户名,同时用户名编辑框不能编辑4,发送编辑框输入发送内容,单击发送按钮,启动输出流,把信息发送出去,同时把发出的信息追加到聊天 内容文本域内,显示用户名,时间和发送内容。5,单击退出按钮,运用 File类和JfileChooser类实现聊天信息的保存6,聊天信息文本域,在线用户显示域和发送信息的文本域加了滚动条,其中聊天信息文本域,发送信息的文 本域的文字能自动换行。7 别的客户端发来信息是通过输入流读取信息,并截取发来信息的用户名及信息,用户名加到在线用户列表 上显示在

3、线,信息追加到聊天内容文本域内,显示用户名,时间和发送内容。功能不足之处:1,保存聊天信息保存为text格式的有黑块。保存为 Doc格式的要转码不能直接打开2,用户在线显示,只能在用户发送信息时别的用户才能得到在线的用户名,然后再加到在线用户列表中,显 示用户在线。3,聊天室只适合群聊,没有实现技能群聊又能和单个人聊天的功能4,用户输出“退出”后在线用户列表中就会把用户删除,不过没有实现没找到错误出在哪里。四,演示截图客户端1用户界面(可在冋一个类中打开多个窗客户端2用户界面:体)tn户e辂入幫止巴孑服务器端用户界面体中文格式)':“兰自五等待內白徉IT 同利3Ei£接 等待

4、再向在接“ 対己谨摄 哥诗円白这擡 54M5HSS 卑诂冉口卿" 曲汕嬉尸為: 54?0Ah£: 汎3龙左户端; 鬓強雀户箱; 54却4宮户?畫: :,$和涓户j岂円流BS:4S:23private JLabel user name, in put客户端1代码(客户端2,3.代码同下)SuppressWarni ngs("all")public class Clie nt1 exte nds JFrame 用doc格式保存的聊天信息(打开时转码为简设计源代码(导入的代码省略)可可说*大新 矣笑识:可口饶.:岭唁B C 兰笑诺.:椰在辱pjo aOL212

5、15阳尢 30L2-12-1P 的舸”筈第 30L2-lS Hrllai-可可 3012-n-is Drn-阳光 2012 12-13 部在郸尖莫 20L2 12 12Sttt 亠3偿却ii、卜5!1hS11C1JFS 引 fllprivate JButton denglu, exit, send; private JTextArea n ame, msg, sayprivate JTextField jtl;private JSplitPa ne split;boolea n log inF lag = false;private Socket socket;private Outputst

6、ream op;private JList user_list; 列表private DefaultComboBoxModel model;/ 组件模型public Client1() super();setTitle(” 聊天室”);user name = new JLabel("用户名:”);in put = new JLabel("输入聊天内容:”);denglu = new JButton("登陆");exit = new JButton("退出");send = new JButton("发送");msg

7、 = new JTextArea(10, 25);msg.setEnabled(false);/ 文本条不可编辑Font fnt1 = new Fon t("Serief", Font.P LAIN, 20);/根据名称、样式和磅值大小设置字体msg.setF on t(fnt1);msg.setLi neWrap(true);/ 自动换行jt1 = new JTextField(15);jt1.setForegro un d(Color.red);say = new JTextArea(2, 15);say.setL in eWrap(true);n ame = new

8、JTextArea(10, 5);n ame.setE nabled(false);user_list = new JList();user_list.setModel(new DefaultComboBoxModel(new String "");model = (DefaultComboBoxModel) user_list.getModel();/获得列表框的模型public void clie ntThread() try socket = new Socket("localhost", 8866);/ 创建接口op = socket.getOu

9、tputStream(); 创建输出流new ClientThread(msg, socket, model, jt1).start();/ 启动线程 catch (UnknownH ostExcepti on e) / TODO Auto-ge nerated catch blocke.pri ntStackTrace(); catch (IOExceptio n e) / TODO Auto-ge nerated catch blocke.pri ntStackTrace();/发送事件public void sen d() 聊天记录.doc");/聊天信息保存位置if (!lo

10、gi nF lag) / 先登录JOptionPane.showMessageDialog(null,"请先登录。”); return;Stri ng sen dUserName = jt1.getText();Stri ng info = say.getText();if (info.equals("") / 信息为空就提示JOptionPane.showMessageDialog(null,"请输入发送信息! !"); return;try String username = jt1.getText() + "说:”;初始化传递发

11、送信息的标记 op.write(username + info).getBytes(); 仓U建输出流 catch (IOExceptio n e) / TODO Auto-ge nerated catch blocke.pri ntStackTrace();DateFormat df = DateFormat.getDateInstance(); 获得 DateFormat 实例 String dateString = df.format(new Date();/ 格式化日期 df = DateFormat.getTimeI nsta nce(DateFormat.MEDIUM);Strin

12、g timeString = df.format(new Date();/ 格式化时间msg.append("" + sendUserName + "" + dateString + "" + timeString+ "n" + " " + info + "n"); 追加发送的信息try FileWriter fw = new FileWriter(f, true);/ 文件输出流 fw.write(msg.getText().toString();/ 向文件内写入信息 fw

13、.close(); catch (IOExceptio n e) / TODO Auto-ge nerated catch blocke.pri ntStackTrace();say.setText("");public void in it() setLayout(new BorderLayout(); 窗体布局JPa nel up = new JPa nel();up.setBackground(ColorPINK);/ 背景色 up.add(user name);up.add(jt1);up.add(de nglu);up.add(exit);/添加滚动条JScrol

14、lPa ne scr = new JScrollPa ne(say);JScrollPa ne js1 = new JScrollPa ne(user_list);JScrollPa ne js = new JScrollPa ne(msg);/ JSplitPane用于分隔两个(只能两个)Componentsplit = new JSplitPa ne(JSplitPa ne.HORIZONTAL_SPLIT, true, js1, js);split.setDividerLocation(100); 分割位置JPa nel dow n = new JPa nel();down.setBac

15、kground(ColorPINK);/ 设置背景色dow n. add(i nput);dow n. add(scr);dow n. add(se nd);add(up, BorderLayout.NORTH);add(split, BorderLayout.CENTER);add(dow n, BorderLayout.SOUTH);den glu.addAct ion Liste ner(new Action Liste ner() Overridepublic void action Performed(Act ionEvent e) / TODO Auto-ge nerated me

16、thod stubif (logi nFlag) /已登录标记为 trueJOptionPane.showMessageDialog(nuII,"在同一窗口只能登录一次。");return;jt1.setE nabled(false);log inF lag = true;model.addEleme nt(jt1.getText(););sen d.addAct ion Liste ner(new Acti on Liste ner() Overridepublic void action Performed(Act ionEvent e) / TODO Auto-ge

17、nerated method stubsen d(););exit.addActi on Liste ner(new Actio nListe ner() public void action Performed(fi nal ActionEvent e) JFileChooser chooser = new JFileChooser();/ 创建文件选择器FileNameExte nsionF ilter filter = new FileNameExte nsionF ilter("jpg", "gif', "txt", "

18、;mdl", "doc");/设置文件格式chooser.setFileFilter(filter);/ 设置当前文件过滤器 int returnVal = chooser.showSaveDialog( null);if (returnVal = JFileChooser.APPROVE OPTION) System.out.pri ntln ("You chose to Save this file:"+ chooser.getSelectedFile().getName();try op.close();socket.close(); c

19、atch (IOException e1) / TODO Auto-ge nerated catch blocke1.pri ntStackTrace();System.exit(O););public void showMe() ini t();/ pack();setSize(500, 500);/窗体大小 setResizable(false);/ 不可改变大小 setLocation(200, 200);/ 位置 setVisible(true);/ 显示 setDefaultCloseOperati on (JFrame.EXIT_ON_CLOSE);public static vo

20、id main(String args) Clie nt1 l = new Clie nt1();l.showMe();l.clie ntThread();客户端线程部分ClientThread类:SuppressWarnings("all")public classClientThread extends Threadprivate JTextArea msg;private Socket socket;DefaultComboBoxModel model;private JTextField jt1;public Clie ntThreadJTextArea msg,

21、Socket socket,DefaultComboBoxModel model,JTextField jt1) this.msg = msg;this.socket = socket;this.model=model;this.jt1 =jt1;Overridepublic void run() while (true)try In putStream is= socket.getl nputStream(); 仓 U建输入流byte b= new byte1024;int n=is.read(b); 获得字节数String s= new String(b,0,n); /接收到的信息Stri

22、ng username=jt1.getText()+ "说:"if(!s.startsWith(username) /只接受别人发来的信息String sendname=s.substring(0,s.indexOf(”说:");/获得用户名String receive=s.substring(s.indexOf("说:")+2);/获得信息 if (s.startsWith("sendname 说:退出") 是否退出 model.removeElement(sendname); / 从用户歹U表中移除用户 else boo

23、lean itemFlag = false; /标记是否为列表框添加列表 项,为true不添加,为false添加for (int i = 0; i < model.getSize(); i+) if (se ndn ame.equals(Stri ng) model .getEleme ntAt(i) /如果用户列表中存在该用户名itemFlag = true; /设置为true,表示不添加到用 户歹y表break;if (!itemFlag) model.addElement(sendname); / 将登录用户添加 到用户列表DateFormat df = DateFormat. g

24、etDateInstance(); / 获得 DateFormatString dateString = df.format( new Date(); 格式化日期df = DateFormat. getTimeInstance(DateFormat. MEDIUM );String timeString= df.format( new Date(); /格式化时间msg. appe nd(”"+se ndn ame+""+dateStri ng+" "+timeStri ng+ "n"+""+receiv

25、e+ "n ”);/ 追加信息 catch (IOException e) / TODO Auto-generated catch blocke.pri ntStackTrace();月服务器端 ServerAreaText类:SuppressWarnings("all")public classServerAreaText extends JFrame private JTextArea jta;private JScrollPa ne jsp;private Socket socket;private static ArrayList<Socket>

26、; al = new ArrayList<Socket>(); /套接字列表 public ServerAreaText() jta = new JTextArea(20, 40);jta.setEditable( false);jta.setLineWrap( true);jsp = new JScrollPa ne(jta);/get set方法,属于类变量public static ArrayList<Socket> getAl() return al;public static void setAl(ArrayList<Socket> al) Ser

27、verAreaText. al = al;public void init() setTitle("聊天室服务器端");this.add(jsp);public void EventHandle() try ServerSocket server = new ServerSocket(8866); 创建接口 while (true) jta.append(”等待用户连接"+ "n");socket = server.accept();/ 连接al.add(socket);jta.append(socket.getPort() + "已

28、连接"+ "n");new ServerThread1(jta, socket).start();/ 启动线程 catch (Exceptio n e) e.pri ntStackTrace();public void showMe() in it();pack();setResizable(false);this.setLocatio n(150, 150);this.setVisible( true);this.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE ); Even tHa ndle();public static void main(String args) / TODO Auto-generated method stub new ServerAreaText().showMe();服务器端线程部分ServerThread1 类:SuppressWarnings("all")public cla

温馨提示

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

评论

0/150

提交评论