已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
商务学院课 程 论 文题目: JAVA期末大作业姓 名: 王姗 学 号: 2007030331205 学 院: 商务学院 专 业: 信息管理与信息系统 指 导 教 师: 沈桂兰 2010年 12 月 7 日JAVA期末大作业一、系统的功能介绍本系统是一个聊天室系统分为服务端与客户端,服务端有发送和退出功能,客户端有连接、发送、退出功能,客户端可以通过连接与服务端连接上,向服务端发送数据,服务端可以通过客户端的连接,接受客户端发送的数据,也可以向客户端发送数据。且本系统与数据库进行连接,数据库记载了聊天记录和所有登录用户端信息。二、界面的设计截图(一)服务器(二)客户端三、核心代码说明(一)ClientWindow的代码package ws;import java.awt.*;import javax.swing.*;import java.io.*;import .*;public class ClientWindow extends Thread static ClientFrame myWindow = new ClientFrame(聊天室:客户); public static void main(String args) myWindow.setBounds(50,100,400,300); myWindow.setVisible(true); Thread receiver = new ServerWindow(); receiver.setDaemon(true); /后台程序 receiver.start();/创建并启动接收线程 public void run() /接收信息线程 boolean done = true; while(done) /接收信息 /如不为空,则在输出文本区显示 /否则,done=false; try String str=myWindow.in.readLine(); /接收服务器信息 if(str!=null) myWindow.showText(服务器:+str); catch(IOException e) System.out.println(连接断开!); done = false; (二)ClientFrame的代码package ws;import java.awt.*;import javax.swing.*;import java.awt.event.*;import java.io.*;import .*;import javax.swing.border.*;public class ClientFrame extends JFrame /创建JFrame的子类 public Socket socket=null; /连接时获取的socket放在这里 public BufferedReader in=null; /从这里读入数据 public PrintWriter out=null; /从这里输出数据 public boolean connectFlag=false; /当建立连接时,该标志为true private Container content = getContentPane(); private JTextArea text= new JTextArea(30,100); /生成输出文本组件 private JTextArea keyIn= new JTextArea(30,100); /生成输入文本组件 public static final int CONNECT=001; /按钮标示号 public static final int SEND=002; public static final int QUIT=003; public ClientFrame(String title) /构造方法 super(title); /调用JFrame的构造方法 setDefaultCloseOperation(EXIT_ON_CLOSE); Box room = Box.createVerticalBox(); /创建聊天室 text.setEditable(false); text.setLineWrap(true); JScrollPane scrollText=new JScrollPane(text); /加滚动条 scrollText.setAutoscrolls(true); scrollText.setPreferredSize(new Dimension(400,1000); room.add(scrollText); keyIn.setLineWrap(true); JScrollPane scrollKey=new JScrollPane(keyIn); /加滚动条 scrollKey.setAutoscrolls(true); room.add(scrollKey); JPanel control = new JPanel(); /创建控制面板 Dimension size =new Dimension(80,20); Border border = BorderFactory.createRaisedBevelBorder(); JButton connect = new JButton(连接 ) ; JButton send = new JButton(发送); JButton quit = new JButton(退出); connect.setBorder(border); send.setBorder(border); quit.setBorder(border); connect.setPreferredSize(size); send.setPreferredSize(size); quit.setPreferredSize(size); connect.addActionListener(new ControlAction(CONNECT); send.addActionListener(new ControlAction(SEND); quit.addActionListener(new ControlAction(QUIT); control.add(connect); control.add(send); control.add(quit); room.add(control); content.add(room,BorderLayout.CENTER); public void showText(String str) /在输出文本区显示文本 text.append(str+n); class ControlAction implements ActionListener /按钮事件处理 int controlType=CONNECT; public ControlAction(int type) controlType = type; public void actionPerformed(ActionEvent e) switch (controlType) case CONNECT: /按了连接键 if(!connectFlag) try socket=new Socket(5,8189); /与服务器建立连接 connectFlag = true; in = new BufferedReader( new InputStreamReader(socket.getInputStream(); /输入数据流/创建并启动接收线程 out = new PrintWriter(socket.getOutputStream(),true); /输出数据流 /boolean done = true; catch(IOException ie) System.out.println(连接断开!); connectFlag = true; break; case SEND: /按了发送键 if (connectFlag) String keyText= keyIn.getText(); /在输出文本区显示输入的文本 showText(客户:+keyText);/发送键入的文本 keyIn.setText(); out.println(keyText); /将输入文本发送给服务器 break; case QUIT: /按了退出键 connectFlag = false; try out.println(QUIT); out.close(); in.close(); System.exit(1); socket.close(); catch (IOException ioe) (三)ServerWindow的代码package ws;import java.awt.*;import javax.swing.*;import java.io.*;import .*;public class ServerWindow extends Thread public static ServerFrame myWindow = new ServerFrame(聊天室:服务器); public static ServerSocket serverSocket = null; public static void main(String args) myWindow.setBounds(500,100,400,300); myWindow.setVisible(true); myWindow.showText(等待连接.); try ServerSocket serverSocket=new ServerSocket(8189); /建立服务器socket,port=8189 Socket incoming = serverSocket.accept(); /等待客户建立连接 myWindow.connectFlag = true; myWindow.in = new BufferedReader( new InputStreamReader(incoming.getInputStream(); /输入数据流 myWindow.out = new PrintWriter(incoming.getOutputStream(),true); /输出数据流*/ myWindow.showText(连接建立!); myWindow.out.println(连接建立!请发送信息,输入 BYE 结束n); /向客户发登录信息 Thread receiver = new ServerWindow(); receiver.setDaemon(true); /后台程序 receiver.start();/创建并启动接收线程 catch (IOException e) myWindow.showText(+e); public void run() /接收信息线程 boolean done = true; while(done) /接收信息 /如不为空,则在输出文本区显示 /否则,done=false; try String str=myWindow.in.readLine(); /接收服务器信息 if(str!=null) myWindow.showText(客户:+str); catch(IOException ie) System.out.println(连接断开!); done = false; (四)ServerFrame的代码package ws;import java.awt.*;import javax.swing.*;import java.awt.event.*;import java.io.*;import .*;import javax.swing.border.*;public class ServerFrame extends JFrame /创建JFrame的子类 public Socket socket=null; /连接时获取的socket放在这里 public BufferedReader in=null; /从这里读入数据 public PrintWriter out=null; /从这里输出数据 public boolean connectFlag=false; /当建立连接时,该标志为true public static ServerSocket serverSocket = null; private Container content = getContentPane(); private JTextArea text= new JTextArea(30,100); /生成输出文本组件 private JTextArea keyIn= new JTextArea(30,100); /生成输入文本组件 public static final int CONNECT=001; public static final int SEND=002; public static final int QUIT=003; public ServerFrame(String title) /构造方法 super(title); /调用JFrame的构造方法 setDefaultCloseOperation(EXIT_ON_CLOSE); Box room = Box.createVerticalBox(); text.setEditable(false); text.setLineWrap(true); JScrollPane scrollText=new JScrollPane(text); /加滚动条 scrollText.setAutoscrolls(true); scrollText.setPreferredSize(new Dimension(400,1000); room.add(scrollText); keyIn.setLineWrap(true); JScrollPane scrollKey=new JScrollPane(keyIn); /加滚动条 scrollKey.setAutoscrolls(true); room.add(scrollKey); JPanel control = new JPanel(); Dimension size =new Dimension(80,20); Border border = BorderFactory.createRaisedBevelBorder(); JButton connect = new JButton(连接 ) ; JButton send = new JButton(发送); JButton quit = new JButton(退出); connect.setBorder(border); send.setBorder(border); quit.setBorder(border); connect.setPreferredSize(size); send.setPreferredSize(size); quit.setPreferredSize(size); / connect.addActionListener(new ControlAction(CONNECT); send.addActionListener(new ControlAction(SEND); quit.addActionListener(new ControlAction(QUIT); / control.add(connect); control.add(send); control.add(quit); room.add(control); content.add(room,BorderLayout.CENTER); public void showText(String str) text.append(str+n); class ControlAction implements ActionListener /按钮事件处理 int controlType=CONNECT; public ControlAction(int type) controlType = type; public void actionPerformed(ActionEvent e) switch (controlType) case SEND: /按了发送按钮 if (connectFlag) String keyText= keyIn.getText(); /在输出文本区显示输入的文本 showText(服务器:+keyText); /发送键入的文本 keyIn.setText(); out.println(keyText); /将输入文本发送给服务器 break; case QUIT: /按了退出按钮 connectFlag = false; try out.println(QUIT); out.close(); in.close(); System.exit(1); catch (IOException ioe) System.out.println(Quit Error!); 四、涉及到的知识点的说明窗体(Frame)容器(Container) (设置容器布局)面板 (Panel)(设置面板布局)控件、1 窗体在Java 程序中,我们如果想创建并运行一个窗体,就必须让我们编写的类 继承自JFrame 类,而使用JFrame 类之前必须导入java.awt.* 和 java.swing.* 如:public class ClientWindow extends Thread static Clie
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- LY/T 3444-2025濒危野生植物人工培植管理规范
- 烧伤病人转运中的特殊设备使用
- 手术中用药管理规范
- 护理操作中的静脉输液技术
- 地板铺设工试题及答案
- 合伙中止协议书
- 围棋十级考试题目及答案
- 2021年《榜样5》中央专题节目心得及感悟作文
- 2026年肾周积液鉴别诊疗试题及答案(肾内科版)
- 《工会法》知识考试题库100题(含答案)
- 个人职业形象塑造指导书
- 2025年专业公共营养师资格考试真题与答案解析
- 中医食疗护理
- 金太阳2026届高三联考313C语文试题(含答案)
- 华为内部晋升制度
- 2026届新高考地理三轮热点复习综合题提分策略
- 2026年应急演练计划
- GB/T 46971-2026电子凭证会计数据银行电子对账单
- 火场内攻救人课件
- 危化企业防雷生产制度
- 2026年二级建造师之二建市政工程实务考试题库500道及答案【夺冠系列】
评论
0/150
提交评论