




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java实训设计报告Java实训设计报告电子信息工程学院专业:软件技术班级:1班 实训:聊天室项目简介项目名称聊天室项目功能运用java程序编写聊天室,实现简单的聊天功能。它是图形界面,线程,流与文件系统等技术的综合应用。其界面主要采用了java.awt包,java.swing包以及java.util包等。程序实现了聊天室的基本功能,其中有:1、启动服务器。2、进入客户端界面。3、登录聊天室。4、发送信息(实现按回车键发送消息)。5、关闭服务器项目目的1.能在程序中熟练应用Java 多线程技术2.熟悉Java C/S 程序的结构和工作原理3.能开发客户端应用程序4.会编写服务器端多线程应用程序。5.熟悉Java 数据库连接方法,能在程序中读写数据库主要技术Java编程语言、javaSwing组件开发环境jdk1.6.0_10项目特点使用组件构建的C/S应用程序各项功能的组织合理搭配应用图标控制功能实现技术重点构建基于C/S架构的应用程序Swing组件应用事件监听的应用方法的编写技术难点Swing组件的应用事件监听器的使用异常处理方法简便的选择系统总体设计1、设计思路聊天系统的设计跟普通网站设计有着许多不同的地方,普通网站设计所考虑的因素,例如,普通网站需要对布局进入大量美化以及动画设计等等,而聊天室只要提供满足访客双方直接实时聊天即可。因此,在设计聊天系统的过程中,必须要考虑好以下几个设计要点:在Internet上的聊天程序一般都是以服务器提供服务端连接响应,使用者通过客户端程序登录到服务器,就可以与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。因此,程序要在TCP/IP环境下,实现服务器端和客户端两部分程序。1首先通过继承JFrame类构造服务器界面。2设计客户端程序使其能够完成正常的通信功能。3设计监听程序,使其显示登录的ip地址端口号,以及用户昵称,通过侦听按钮可以调用客户端程序,实现聊天功能。2、各个模块详细的功能描述。1、服务器端功能描述:启动服务器端。2、客户端功能描述: 启动客户端;显示登录昵称:显示聊天记录:发送信息;退出聊天室。系统详细设计1、界面设计主要由类ChatRoom来实现,界面实际总体如下:输入昵称的文本框,输入IP地址的文本框以及输入端口的文本框;连接的按钮;退出按钮;接受消息的文本域;发送消息文本框;发送按钮。项目设计在设计聊天室时,编写3个Java源文件:Client.java、Frame1.java、ServerThread.java;分别放在两个包中,一个是client,放Client.java、Frame1.java;一个是server,放ServerThread.java;聊天室除了上述Java源文件所给出的类外,还需要Java系统提供的一些重要类,如JButton,JTextField等。下面是Java源文件的总体设计。Client(主类)客户端Client类负责创建聊天室客户端的主窗口,该类含有main方法,计算器从该类开始执行。ServerThread(主类)服务器 ServerThread类负责创建聊天室服务器的主窗口,该类含有main方法,计算器从该类开始执行。二详细代码设计聊天室程序设计详细代码如下:客户端代码:package client;import javax.swing.UIManager;public class Client public Client() Frame1 frame=new Frame1(); frame.setVisible(true); frame.validate(); public static void main(String args) try UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName(); catch(Exception e) e.printStackTrace(); new Client(); package client;import java.awt.*;import java.awt.event.*;import javax.swing.*;import .*;import java.io.*;public class Frame1 extends JFrame implements Runnable private JPanel contentPane; private TextArea textArea1=new TextArea(); private Label label1=new Label(); private JTextField textField1=new JTextField(); private JButton button1=new JButton(); private JButton button2=new JButton(); private JButton button3=new JButton(); Socket socket=null; BufferedReader in=null; PrintWriter out=null; JTextField server=new JTextField(); JLabel jLabel1=new JLabel(); JLabel jLabel2=new JLabel(); JTextField port=new JTextField(); JScrollPane jScrollPane1=new JScrollPane(); JList jList1=new JList(); JLabel jLabel3=new JLabel(); DefaultListModel l1=new DefaultListModel(); public Frame1() try init(); catch(Exception e) e.printStackTrace(); private void init() throws Exception server.setText(InetAddress.getLocalHost().getHostAddress(); server.setBounds(new Rectangle(69,252,74,22); contentPane=(JPanel)this.getContentPane(); textArea1.setEditable(false); textArea1.setFont(new java.awt.Font(Dialog,Font.PLAIN,14); textArea1.setBounds(new Rectangle(11,9,383,199); textArea1.setBackground(new Color(66,00,233); textArea1.setForeground(new Color(255,00,00); contentPane.setLayout(null); this.setSize(new Dimension(506,314); this.setTitle(客户端); label1.setFont(new java.awt.Font(Dialog,Font.PLAIN,12); label1.setForeground(new Color(110,110,250); label1.setText(消息:); label1.setBounds(new Rectangle(26,213,32,27); button1.setActionCommand(发送); button1.setBounds(new Rectangle(334,216,62,23); button1.setEnabled(false); button1.setFont(new java.awt.Font(Dialog,Font.PLAIN,12); button1.setText(发送); button1.setForeground(new Color(110,110,250); button1.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(ActionEvent e) button1_actionPerformed(e); ); button2.setBounds(new Rectangle(266,251,58,24); button2.setFont(new java.awt.Font(Dialog,Font.PLAIN,12); button2.setText(连接); button2.setForeground(new Color(110,110,250); button2.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(ActionEvent e) button2_actionPerformed(e); ); button3.setBounds(new Rectangle(333,251,62,22); button3.setFont(new java.awt.Font(Dialog,Font.PLAIN,12); button3.setText(退出); button3.setForeground(new Color(110,110,250); button3.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(ActionEvent e) button3_actionPerformed(e); ); jLabel1.setFont(new java.awt.Font(Dialog,Font.PLAIN,12); jLabel1.setToolTipText(); jLabel1.setHorizontalAlignment(SwingConstants.RIGHT); jLabel1.setHorizontalTextPosition(SwingConstants.RIGHT); jLabel1.setText(服务器:); jLabel1.setForeground(new Color(110,110,250); jLabel1.setBounds(new Rectangle(11,254,58,20); jLabel2.setFont(new java.awt.Font(Dialog,Font.PLAIN,12); jLabel2.setToolTipText(); jLabel2.setHorizontalAlignment(SwingConstants.RIGHT); jLabel2.setHorizontalTextPosition(SwingConstants.RIGHT); jLabel2.setText(端口:); jLabel2.setForeground(new Color(110,110,250); jLabel2.setBounds(new Rectangle(172,253,27,18); port.setText(8000); port.setBounds(new Rectangle(202,251,40,22); jList1.setFont(new java.awt.Font(Dialog,Font.PLAIN,12); jLabel3.setBounds(new Rectangle(406,254,91,21); jLabel3.setForeground(new Color(110,110,250); textField1.setBounds(new Rectangle(58,215,271,24); jScrollPane1.setBounds(new Rectangle(404,14,94,226); jScrollPane1.getViewport().add(jList1); contentPane.add(button3,null); contentPane.add(button2,null); contentPane.add(button1,null); contentPane.add(server,null); contentPane.add(jLabel1,null); contentPane.add(textField1,null); contentPane.add(textArea1,null); contentPane.add(jLabel2,null); contentPane.add(port,null); contentPane.add(label1,null); contentPane.add(jScrollPane1,null); contentPane.add(jLabel3,null); jList1.setModel(l1); void button1_actionPerformed(ActionEvent e) out.println(jLabel3.getText()+对+l1.getElementAt(jList1.getSelectedIndex()+说:+textField1.getText(); out.flush(); textField1.setText(); void button3_actionPerformed(ActionEvent e) try out.println(大家尽情聊,再见!); out.flush(); catch(Exception e2) finally System.exit(0); void button2_actionPerformed(ActionEvent e) Thread thread=new Thread(this); thread.start(); public void run() try socket=new Socket(server.getText(),Integer.parseInt(port.getText(); in=new BufferedReader(new InputStreamReader(socket.getInputStream(); out=new PrintWriter(socket.getOutputStream(); button1.setEnabled(true); receiver r=new receiver(); Thread t=new Thread(r); t.start(); textArea1.append(欢迎加入聊天室n); / button2.setEnabled(false); catch(Exception e) textArea1.append(连接失败!请确认服务器地址并且服务器已启动n); private class receiver implements Runnable public void run() String s1=null; try s1=in.readLine(); while(s1!=null) if(s1.equals(Clear users!) l1.removeAllElements(); l1.addElement(大家); jList1.setSelectedIndex(0); else if(jLabel3.getText().equals() jLabel3.setText(s1); else if(s1.length()8&!jLabel3.getText().equals(s1) l1.addElement(s1); else if(!jLabel3.getText().equals(s1) textArea1.append(s1+n); s1=in.readLine(); in.close(); out.close(); socket.close(); catch(Exception e) button1.setEnabled(false); 服务器端代码:package server;import .*;import java.io.*;public class ServerThread implements RunnableServerSocket server=null;BufferedReader in=null;PrintWriter out=null;InetAddress myServer=null;Object users=new Object1000;static int userCount=0;public ServerThread()tryinit();catch(Exception e)e.printStackTrace();private void init() throws ExceptionThread thread=new Thread(this);thread.start();public void run()tryserver=new ServerSocket(8000);Socket socket;while(true)socket=server.accept();if(socket!=null)usersuserCount=socket;Receiver r=new Receiver(socket,userCount);Thread t=new Thread(r);t.start();userCount+;catch(Exception e)e.printStackTrace();private class Receiver implements RunnableSocket socket;int user;Receiver(Socket socket,int user)this.socket=socket;this.user=user;public void run()BufferedReader in=null;PrintWriter out=null;String s1=null;int userNo;tryout=new PrintWriter(socket.getOutputStream();out.println(user+user);out.flush();for(int j=0;juserCount;j+)if(usersj=null)continue;out=new PrintWriter(Socket)usersj).getOutputStream();out.println(Clear users!);out.flush();for(int k=0;kuserCount;k+)out.println(user+k);out.flush();in=new BufferedReader(new InputStreamReader(socket.getInputStream(); s1=in.readLine(); while(!s1.equals(大家尽情聊,再见!)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汉字的形象之韵课件
- 辽宁省铁岭市铁岭县2024-2025学年八年级下学期7月期末考试数学试卷(含答案)
- 广东省云浮市2024-2025学年高一下学期期末教学质量检测物理试卷(含解析)
- 汉字家园5课件
- 汉字字谜教学课件
- 新能源汽车政策对产业发展影响分析
- 金融科技白皮书分析
- 房地产公司的工作总结14篇
- 军事理论-国家安全环境强化版智慧树答案
- 汉字书写笔顺
- 幼儿园小班《保护牙齿》课件
- 工作场所暴力培训
- (新版)广电全媒体运营师资格认证考试复习题库(含答案)
- 保安员资格考试复习题库及答案(800题)
- 乡村公路沥青铺设施工方案
- 矿山事故应急报告制度
- 2024-2025学年山东省淄博市桓台县四年级上学期数学期中考试试题
- DB1402T36-2024农村居家养老服务规范
- 中国发电企业碳中和数字转型白皮书-埃森哲
- ISO27001信息安全管理体系培训资料
- 《绝对值》教学课件
评论
0/150
提交评论