达内科技公司实习日报表

时间:2024.5.14

2012-7-1 达内实习周记

不知不觉,我们在达内实习已经一周了,经过这六天来的培训,我已经初步形成了java编程的思想。从刚开始的零基础,一步一步深入到java的核心,付出了很多,也收获了很多。

先谈一下我对java的认识吧。Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java的语言特点是简单、面向对象、解释、健壮、安全、可移植、高性能。 从最初的第一个简单小应用程序——只打印一行字到简单的局域网信息传递编程的实现,我们每个人都在不断摸索、进步中。与以往不同的是,我们不是单纯的只讲解理论知识,达内老师特别注重我们的实际操作能力的培养。每天,我们都是一边学习Core Java基础知识,一边上机练习具体应用程序的编写,以此来及时加深巩固所学的知识。

我们着重学习了面向对象编程。重点学习了类及其三大特点的应用,创建对象、使用对象的方法,List、Set、Map三大集合的实际应用,线程和输入输出流以及网络编程的相关知识的具体应用程序的编程。同时老师还引导我们学习了通过查询JDK API来更大范围的使用、掌握类。 通过这段时间的实习,让我明白了,学习一门编程语言,首先要从简单的认识,再到深入的了解,要通过java程序应用,也就是上机来提高我们对java程序语言学习的兴趣。达内实习的严格、规范性让我明白了怎样从一个学生转变成一个员工的过程。

以前,我们总是学习理论知识,总让人感觉盲目,毫无头绪,达内的实习,很注重理论与实践结合,让我们的学习变得生动、有趣。我相信通过后面的项目开发实习,我们能更加系统的掌握项目开发流程。


第二篇:西安达内科技-渭南师院信计-郭晓燕实习总结报告


生 产 实 习 报 告

                                                                                                                                                           说    明

1.            生产实习结束之前,每个学生都必须认真撰写《生产实习报告》。通过撰写生产实习报告,系统地回顾和总结实习的全过程,将实践性教学的感性认识升华到一定的理论高度,从而提高实习教学效果。

2.            实习报告要求条理清晰,内容详尽,数据准确。字数不少于5000字。

3.            生产实习报告的质量反映了生产实习的质量,它是实习成绩评定的主要依据之一。没有在规定时间前递交实习报告者不得参加实习成绩评定。

4.            生产实习报告含有学生实习鉴定表。

5.            实习单位指导教师须在学生实习鉴定表中给予评价并签署,否则视为无效。

6.            封面中的生产实习单位必须写单位的全名,必须写上单位指导教师姓名。

7.             “前言部分:实习背景可简介实习目的、学院有关实习的要求、通过何种方式到此单位实习、实习起止时间等内容;实习环境可包括实习单位全称、地址、实习单位性质、规模、简介、所在部门、该部门主要工作、指导教师安排等内容。

8.            实习内容部分:属报告的主要部分。实习过程概述实习各阶段所从事的主要工作等;实习内容包括项目介绍、本人从事的工作、软硬件平台和技术等;实习成果应具体列出自己所完成的主要成果及实际应用情况等。

9.            总结部分:其中其它意见可对学院课程设置、教学内容、实习安排等方面提出自己的意见或建议,也可对实习单位的各个方面提出自己的意见。

目 录


学生实习鉴定..................................... 109


1.  前言

1.   实习背景

    现如今,中国的软件产业出现迅猛发展的局势,电子更新速度日益增长,可是日益严峻的人才短缺问题成为束缚中国软件产业发展的最大隐患。尤其是近几年来,中国的软件服务外包产业作为软件产业的支柱产业之一。目前国内软件企业中的软件开发人才,一部分来自高校相关计算机专业,另外一部分来自专业的软件研发培训机构软件人才培训配置设计摆设,是我国软件和服务外包产业加速发展的重要包管和计算机专业实习报告关键环节,怎样冲破中国软件软件人才短缺的瓶颈,已成为摆在我们面前的课题。

   面临中国软件产业国际化发展的大趋势,面向中国IT专业大学小时候就有意造就国际化的创新IT人才是符合当前世界IT产业的发展趋势,才气赢患上中国IT产业起飞的制高点,才是中国软件外包营业持续发展的焦点竞争力在当今IT产业链高度整合、高度一体化的大趋势下,引进国际资源,校企紧密互助,走进国际化的IT人才造就标准样式之路无疑是最好的途径。那么怎么走向国际化IT人才造就标准样式的创新之路?怎样准确把握企业需求,畅通参加工作渠道,解决大家小时候起就有就业困难的问题?这些问题吸引了当局、院校、教育机构以及企业的热烈恳切存眷面临当前的岌岌形式下,作为中国高端IT培训行业带领品牌的达内IT培训集团,与国内著名厂商微软IT学院互助成立微软IT中国发展中心。

   达内IT培训集团是计算机专业实习报告目前中国高端IT培训的带领品牌,致力于造就JAVA、C++、C#/.NET等方面的中高端软件人才,是中国首家上岛国际风险投资的IT培训机构,是SUN公司在中国境内最大的JAVA培训互助伙伴、中关村科技园区管委员会指定的“软件人才造就树模“‘是中国“先参加工作后付款”IT培训标准样式的首创者2006-2009连续4年入选德勤评选“高科技高成长中国50强、亚太地区500强”

   达内提倡“高新参加工作、高频为参加工作”,而非寻求简单的参加工作律,迄今已累计为IBM、摩托罗拉,华为、中软、用友、阿里巴巴、新浪、百度、联想、神州数字、大唐电信、亚信等致命企业造就输送了5完多中高级软件人才。

   微软IT学院中国发展中心将微软全球IT教育方案结合中国高校IT人才造就的需求与近况,先容“微软IT学院”的中国方案,并就经济发展与企业需求调研、专业与课程配置、讲授适才力量的造就、实验室、校内外实际练习及实训、课程与关于教材、讲授质量办理与评估、企业定单与参加工作输送等八个关键环节提供可借鉴的实施计谋。

达内IT培训集团总裁韩少云说:“只有面临当下大学生的参加工作近况,才是真正帮忙大学生开脱参加工作厄运,只有与国内外IT企业计算机专业实习报告举行互助,才是真正的给中国大学生提供培训参加工作一站式的解决方案,才是最符合中国软件人才造就的国情”

1.   实习环境

《1》实习地点:达内IT培训集团西安分校

《2》实习企业的情况:

  达内IT培训集团是中国高端IT培训行业领导品牌,致力于培养Java、C++、C#/.Net等方面的中高端软件人才。由美国国际数据集团IDGVC Partners和集富亚洲JAFCO ASIA投资,是国内首家获得国际风险投资的IT培训机构,20##-2008连续3年入选德勤“高科技高成长中国50强、亚太地区500强”。

  达内IT培训集团是Java之父Sun公司在中国境内最大的Java培训合作伙伴、中关村科技园区管委会指定的“软件人才培养示范基地”,是中国“先就业后付款”IT培训模式的创始者。

  经过7年运营, 达内IT培训集团在大学生IT就业培训领域积累了丰富的专业经验与就业资源。 以中关村科技园区为依托,达内在中国软件业发达城市——北京、上海、广州、深圳、大连、南京、武汉、杭州、西安、苏州、成都、太原等20多个城市,建立了近30家培训中心,拥有2万多平米的培训场地,在校生规模达5000人。已累计为IBM、微软、摩托罗拉、华为、中软、用友、Yahoo、阿里巴巴、TOM、新浪、搜狐、百度、联想、神州数码、大唐电信、亚信等知名IT企业培养输送5万多名中高级软件人才,跨越电信、金融、电子政务(商务)、电力、通讯、搜索、欧美外包及对日外包等十数个行业。

2. 实习内容

 2.1    实习过程

    使用Eclipse开发工具,使用Java语言进行支持跨平台对QQ聊天吧的软件开发。

    5.12:第一天,在Java中HelloWorld编写

    5.13:学习了猜数字游戏,九九乘法表等

    5.14: 今天学习了java的一些新算法,例如:测试string类型里面的常用方法。

    5.15: 今天了解了线程和进程的不同, 并且操作了线程的同步处理脏数据。学习了      I/O流的分类,并且了解了按照不同情况的分类,并在老师的带领下对文件流,逐  行流,对象流作做了相关测试。

    5.16:习了网络的相关知识,例如网络传输的七层结构,各层主要的协议。了解了TCP/UDP的区别、TCP编程步骤、Socket端编码步骤,并做了相关测试。

    5.17:继续昨天的相关测试。

  5.18:今天休息一天。

  5.19:今天学习了布局方式,例如:flowlayout ,gridlayout,borderlayout,并做了相关c程序测试。

  5.20:今天的任务是启动项目做QQ聊吧。

  5.21:今天的任务是继续项目做QQ聊吧,

  5.22:QQ聊吧的程序完善中。

  5.23:对每组所作的QQ聊吧分组进行讲解。

2.   实习内容

主要学习了几个程序,例如:《1》猜数字。

import java.util.Random;//

import java.util.Scanner;

publicclass CaiShuZi {

   publicstaticvoid main(String[] args){

         Random ran=new Random();

         int dos=ran.nextInt(100)+1;//随机产生一个随机数

         Scanner sc=new Scanner(System.in);

         System.out.println("请输入1-100之间的数字:");

         int count=0;

         while(true){

              count++;//统计猜的次数

              int res=sc.nextInt();//用户输入要猜的数字

              if(res>dos){

                    System.out.println("您猜大了!");

              }elseif(res<dos){

                    System.out.println("您猜小了!");

              }else{

                    System.out.println("恭喜您猜对了!");

                    System.out.println("您总共猜了"+count+"次");

                    break;

              }

         }

   }

《2》随即产生3D号码

import java.util.Random;

publicclass Test3 {

   publicstaticvoid main(String[] args){

         //随机产生一个3D号码:产生3个0-9之间的随机数

         Random ran=new Random();

         int res1=ran.nextInt(10);

         int res2=ran.nextInt(10);

        int res3=ran.nextInt(10);

        System.out.println("本期3D中奖号:"+res1+res2+res3);

   }

}

《3》信息录入

import java.util.ArrayList;

import java.util.List;

import java.util.Scanner;

import cn.com.tarena.day02.Student;

/**

 *@guoxiaoyan   Email:429308602.com.cn

 *@version  创建时间:20##-5-15 下午04:45:33

 *类说明: 学生信息录入完整版1.0

 */

publicclass Xinxiluru{

     //import cn.com.tarena.day02.Student;

     static List students=new ArrayList();

    /**

     * main方法:系统启动入口

     * @param args

     */

     publicstaticvoid main(String[] args){

         //初始化主界面

         init();

     }

     /**

      * init()方法:用于初始化系统主界面

      */

     publicstaticvoid init(){

         System.out.println("|*****************************|");

         System.out.println("|*****输入1查询当前所有学生信息****|");

         System.out.println("|*****输入2录入学生信息 **********|");

         System.out.println("|*****输入0退出系统 *************|");

         System.out.println("|*****************************|");

         Scanner sc=new Scanner(System.in);

         int res=sc.nextInt();

         if(res==1){

              printAll();//调用在控制台打印当前所有已录入的学生信息的方法

         }elseif(res==2){

              insertStudent();//调用用于向集合中插入数据的方法

         }elseif(res==0){

              stop();//调用退出系统方法

         }

     }

     /**

      * stop()方法:用于退出系统

      */

     publicstaticvoid stop(){

         System.out.println("程序结束!");

         System.exit(0);//使程序直接结束

     }

     /**

      * pringtAll方法:在控制台打印当前所有已录入的学生信息

      */

     publicstaticvoid printAll(){

         System.out.println("|------------------------------------|");

         System.out.println("| 姓名 | 性别 | 年龄 | 身高(cm) | 体重(斤) |");

         System.out.println("|------------------------------------|");

         for(int i=0;i<students.size();i++){

              Student stu=(Student)students.get(i);

              System.out.println("| "+stu.getName()+" |  "+stu.getSex()+"  | "+stu.getAge()+" |  "+stu.getHeight()+"  |  "+stu.getWeight()+" |");

              System.out.println("|------------------------------------|");

         }

         System.out.println("|*****************************|");

         System.out.println("|*****输入1进入主界面************|");

         System.out.println("|*****输入0退出系统 *************|");

         System.out.println("|*****************************|");

         Scanner sc=new Scanner(System.in);

         int res=sc.nextInt();

         if(res==1){

              init();//调用初始化主界面方法

         }elseif(res==0){

              stop();//调用退出系统方法

         }

     }

     /**

      * insertStudent():用于向集合中插入数据

      */

     publicstaticvoid insertStudent(){

         System.out.println("信息录入-->请输入学生完整信息,格式如:张三 男 20 175 120(数据之间用空格隔开)");

         Scanner sc=new Scanner(System.in);

         String str=sc.nextLine();

         String[] res=str.split(" ");

         Student stu=new Student();

         String name=res[0];

         String sex=res[1];

         int age=Integer.parseInt(res[2]);

         double height=Double.parseDouble(res[3]);

         double weight=Double.parseDouble(res[4]);

         stu.setName(name);

         stu.setSex(sex);

         stu.setAge(age);

         stu.setHeight(height);

         stu.setWeight(weight);

         students.add(stu);

        

         System.out.println("|*****************************|");

         System.out.println("|*****输入1继续录入学生信息*******|");

         System.out.println("|*****输入2进入主界面************|");

         System.out.println("|*****输入0退出系统 *************|");

         System.out.println("|*****************************|");  

         int re=sc.nextInt();

         if(re==1){

             insertStudent();//调用用于向集合中插入数据的方法

         }elseif(re==2){

             init();//调用初始化主界面方法

         }elseif(re==0){

             stop();//调用退出系统方法

         }

     }

    

}

《4》倒计时

import javax.swing.*;

import java.awt.*;

/**

 *@guoxiaoyan Email:429308602.qq.com

 *@version 创建时间:20##-5-16 上午11:05:04

 * 类说明;十分钟倒计时

 */

     publicclass  DaojiShi extends Thread{

         int time=7200;

         JLabel j=new JLabel();

         //初始化窗口界面

         publicvoid initFrame(){

              JFrame win =new JFrame("倒计时");//创建一个窗口;

              j.setText("准备十分钟休息");

              j.setFont( new Font("宋体",Font.BOLD,30));

              j.setBackground(Color.red);

             

             

            win.add(j);

              win.setSize(400,300);//窗口的大小

              win.setLocation(100,200);//设置窗口显示的位置

              win.setVisible(true);//设置窗口是否显示

              win.setResizable(true);//设置窗口大小是否渴念

              win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

              //设置窗口关闭默认操作方式

             

             

         }

         publicvoid run(){

              int h;

              int m;

              int s;

              while (time>0){

                h=time/3600;

                m=time%3600/60;

                s=time%60;

                try {

                   Thread.sleep(1000);//让程序等一秒之后在执行循环

                   //System.out.println(h+"时"+m+"分"+s+"秒");

                   String str=h+"小时"+m+"分"+s+"秒";

                   j.setText(str);

                   time--;

              } catch (InterruptedException e) {

                   // TODO Auto-generated catch block

                   e.printStackTrace();

              }

             

         }

         j.setText("休息结束");

     }

     publicstaticvoid main(String[] args){

         DaojiShi dao=new DaojiShi();

         dao.initFrame();

         dao.start();

     }

     }

<4>一对一无限聊

import java.io.*;//I/O流编程需要使用的包

import java.net.*;//网络编程需要使用的包

import java.util.Scanner;

/**

 * @guoxiaoyan Email:429308602.qq.com

 * @version 创建时间:20##-5-17 上午10:37:39 类说明:Server编码测试

 */

publicclass TestServer一对一无限聊 {

     publicstaticvoid main(String[] args) {

         try {// 1.创建ServerSocket对象启动服务器并开放端口号

              // Oracle数据库:1521 http: 8080 Mysql: 3306

              // ftp:21

              ServerSocket ss = new ServerSocket(9999);

              System.out.println("服务器启动成功,请求连接");

              // 2.调用ServerSocket理面的accpet()等待客户连接;

              // 如果连接成功之后返回Socket套数字;

              Socket socket = ss.accept();

              // 3.用Socket套接字调用getInputStream() getOutputStream()

              // 得到服务器的输出输入流

              InputStream is = socket.getInputStream();

              OutputStream os = socket.getOutputStream();

              // 4.用处理流封装字节流,然后于客户端进行交互

              final BufferedReader br = new BufferedReader(new InputStreamReader(is));

              final PrintWriter pw = new PrintWriter(new OutputStreamWriter(os));

              new Thread() {

                   publicvoid run() {

                       while (true) {

                            String temp;

                            try {

                                 temp = br.readLine();

                                 temp=new String(temp.getBytes(),"UTF-8");

                                 System.out.println("server-->"+temp);

                            } catch (IOException e) {

                                 e.printStackTrace();

                            }

                       }

                   }

              }.start();

              // 接收消息

             

              // 发送消息

              new Thread() {

                   publicvoid run(){

                       while(true){

                            Scanner sc=new Scanner(System.in);

                            String send=sc.nextLine();

                            pw.println("郭晓燕:"+send);

                            pw.flush();

                       }

                       }

              }.start();

             

                  

              new Thread(){

                   publicvoid run() {

                       while (true) {

                            Scanner sc = new Scanner(System.in);

                            System.out.println("Client-->");

                            String send = sc.next();

                            pw.println("你好,允许连接");

                            pw.flush();

                       }

                   }

              }.start();

              // 5。关闭资源

// pw.close();

// br.close();

// socket.close();

         } catch (IOException e) {

              // TODO Auto-generated catch block

              System.out.println("服务器启动不成功!");

              e.printStackTrace();

         }

     }

}

《5》群聊

import java.net.*;

import java.util.ArrayList;

import java.util.List;

import java.util.Scanner;

import java.io.*;

/**

 * @author Email:1991hate1217@163.com

 * @version time:20##-5-17 上午11:30:58

 */

publicclass Testclient群聊 {

     static List<Socket>sockets=new ArrayList<Socket>();

     publicstaticvoid main(String[] args) {

    

         try {

              Socket socket = new Socket("172.166.170.125" , 9999);

              InputStream is = socket.getInputStream();

              OutputStream os = socket.getOutputStream();

              final BufferedReader br = new BufferedReader(new InputStreamReader(is));

              final PrintWriter pw = new PrintWriter(new OutputStreamWriter(os));

              //发送消息

              new Thread(){

                   publicvoid run(){

                       while(true){

                            Scanner cs=new Scanner(System.in);

                            System.out.println("Client-->");

                            String send=cs.nextLine();

                            pw.println("艾比记忆:"+send);

                            pw.flush();

                       }

                   }

                  

              }.start();

             

              //接受消息

              new Thread(){

                   publicvoid run(){

                       while(true){

                            String temp;

                            try {

                                 temp = br.readLine();

                                 temp=new String(temp.getBytes(),"utf-8");

                                 System.out.println("在用户的屏幕上显示->>服务器:" + temp);

                                

                            }

                           

                            catch (IOException e) {

                                 // TODO Auto-generated catch block

                                 e.printStackTrace();

                            }

                           

                       }

                   }

              }.start();

             

              /*pw.close();

              br.close();

              socket.close();*/

         } catch (UnknownHostException e) {

              System.out.println("服务器地址错误");

              // TODO Auto-generated catch block

              e.printStackTrace();

         } catch (IOException e) {

              System.out.println("服务器连接错误");

              // TODO Auto-generated catch block

              e.printStackTrace();

         }

     }

}

《6》QQ聊吧

服务器端:import java.awt.*;

import javax.swing.*;

import cn.com.tarena.domain.Message;

import java.awt.event.*;

import java.text.SimpleDateFormat;

import java.util.*;

import java.util.List;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.net.*;

/**

 *@author   Email:wangwg@tarena.com.cn

 *@version  创建时间:20##-2-17 上午09:10:05

 *类说明: 服务器端主程序

 */

publicclass Server {

     //存放当前在线用户--名字

     List users=new ArrayList();

     //存放当前在线的连接--socket

     List sockets=new ArrayList();

     Map userAdress=new HashMap();

     //服务器端ServerSocket对象

     ServerSocket serverSocket;

     int port=9999;

     JFrame jf=new JFrame("QQ服务器");

     JTextArea jta1=new JTextArea(2,15);

     JTextArea jta2/*=new JTextArea(10,15)*/;

    

    publicvoid startServer(){

        //初始化服务器端界面

        initFrame();

        //初始化服务器端端口(ServerSocket对象实例化)

        initSocket();

        //启动监听客户端

        startListener();

    }

    publicvoid initFrame(){

        jf.setLayout(new BorderLayout());

        final ImageIcon ima=new ImageIcon(Server.class.getResource("qqqq.jpg"));

        jta2=new JTextArea(10,15);

        //设置背景图片

        /*jta2=new JTextArea(){

             Image im=ima.getImage();

             Image image=GrayFilter.createDisabledImage(im);

             {

                 setOpaque(false);

//               setSize(300,300);

             }

              @Override

              public void paint(Graphics g) {

                   g.drawImage(image, 0, 0, this);

                   super.paint(g);

              }

            

        };*/

        JPanel jp=new JPanel();

        jp.setLayout(new BorderLayout());

        ImageIcon ima1=new ImageIcon(Server.class.getResource("qqqq.jpg"));

        JLabel jl=new JLabel(ima1);

        jp.add(jl,BorderLayout.CENTER);

        jp.add(jta1,BorderLayout.SOUTH);

        jta1.setBackground(new Color(90,187,222));

        jta1.setEditable(false);

        jta2.setEditable(false);

        jta2.setBackground(new Color(90,187,222));

        JScrollPane jsp=new JScrollPane(jta2);

        ImageIcon ima2=new ImageIcon(Server.class.getResource("1.gif"));

        JLabel j2=new JLabel(ima2);

        ImageIcon ima3=new ImageIcon(Server.class.getResource("3.gif"));

        JLabel j3=new JLabel(ima3);

        ImageIcon ima4=new ImageIcon(Server.class.getResource("1.gif"));

        JLabel j4=new JLabel(ima4);

        JPanel jp2=new JPanel();

        jp2.setBackground(new Color(90,187,222));

//    jp2.add(j2);

        jp2.add(j3);

        jp2.add(j4);

        jf.add(jp,BorderLayout.NORTH);

        jf.add(jsp,BorderLayout.CENTER);

        jf.add(jp2,BorderLayout.SOUTH);

        jf.setSize(315,650);

        jf.setIconImage(new ImageIcon(Server.class.getResource("qq.png")).getImage());

        jf.setVisible(true);

//    jf.setLocation(0,0);

        jf.setResizable(false);

        jf.setDefaultCloseOperation(

                 jf.EXIT_ON_CLOSE);

    }

    publicvoid initSocket(){

        try {

              serverSocket=new ServerSocket(port);

              jta1.setText("开始启动QQ服务器......\n");

             try {

                   Thread.sleep(5000);

                   jta1.append("服务器启动成功!");

                   jta2.setText("QQ用户当前在线人数>>"+users.size()+"\n");

              } catch (InterruptedException e) {

                   // TODO Auto-generated catch block

                   e.printStackTrace();

              }

         } catch (IOException e) {

              JOptionPane.showMessageDialog(

                       jf,"服务器端启动失败");

         }

    }

    publicvoid updateUsers(){

        jta2.setText("");//清空用户列表

        jta2.setText("QQ用户当前在线人数>>"+users.size()+"\n");

        for(int i=0;i<users.size();i++){

             String str=users.get(i)+""+userAdress.get(users.get(i))+"\n";

             jta2.append(str);

        }

    }

    publicvoid startListener(){

        while(true){

             try {

                 final Socket s;

                 //停到这一个,等待客户端的连接

                   s=serverSocket.accept();

                   System.out.println("连接成功");

                   sockets.add(s);

                   final ObjectInputStream ois ;

                       ois=new ObjectInputStream(

                                     s.getInputStream());

                       new Thread(){

                            publicvoid sendMsg(Message msg){

                                 //sockets----OutputStream---writeObject(msg);

                                for(int i=0;i<sockets.size();i++){

                                    Socket s=(Socket)sockets.get(i);

                                    try {

                                          ObjectOutputStream oos=

                                               new ObjectOutputStream(s.getOutputStream());

                                         oos.writeObject(msg);

                                         oos.flush();

                                    } catch (IOException e) {

                                          // TODO Auto-generated catch block

                                          e.printStackTrace();

                                     }

                                }

                                

                            }

                      

                            publicvoid run(){

                                 while(true){

                                          Message msg;

                                          try {

                                               msg = (Message)ois.readObject();//等待客户端发送信息

                                               String type=msg.getType();

//                                            System.out.println("===="+type);

                                               if("login".equals(type)){

                                                   //登录请求

                                                   //更新服务器端用户列表

                                                   users.add(msg.getFromName());

                                                    userAdress.put(msg.getFromName(),s.getInetAddress());

                                                   updateUsers();

                                                   msg.setUserList(users);

                                                   msg.setMessage("【"+msg.getFromName()+

                                                             "】上线了!【"+new SimpleDateFormat("yyyy年MM月dd日 HH小时mm分ss秒").format(msg.getSendTime())+"】");

                                                   sendMsg(msg);//给每个用户发送消息

                                                   //---msg服务器端处理业务后封装的一个Message对象

                                               }elseif("loginOut".equals(type)){

                                                   //断开请求

                                                   //更新服务器端用户列表

                                                   users.remove(msg.getFromName());

                                                   msg.setMessage("【"+msg.getFromName()+

                                                             "】下线了!【"+new SimpleDateFormat("yyyy年MM月dd日 HH小时mm分ss秒").format(msg.getSendTime())+"】");

                                                   msg.setUserList(users);

                                                   sendMsg(msg);

                                                   sockets.remove(s);

                                                   updateUsers();

                                                   break;

                                               }elseif("send".equals(type)){

                                                   //发送消息

                                                   String str="【"+msg.getFromName()+"说】:"+

                                                   msg.getMessage()+"【"+new SimpleDateFormat("yyyy年MM月dd日 HH小时mm分ss秒").format(msg.getSendTime())+"】\n";

                                                   msg.setMessage(str);

                                                   sendMsg(msg);

                                               }elseif("personal".equals(type)){

                                                   //私聊......

                                                   System.out.println("server---personal");

                                                   msg.setMessage("【"+msg.getFromName()+

                                                             "】请求与你会话【"+new SimpleDateFormat("yyyy年MM月dd日 HH小时mm分ss秒").format(msg.getSendTime())+"】");

                                                   sendMsg(msg);

                                               }elseif("personalSend".equals(type)){

                                                   System.out.println("server---personalSend");

                                                   String str="【"+msg.getFromName()+"说】:"+

                                                   msg.getMessage()+"【"+new SimpleDateFormat("yyyy年MM月dd日 HH小时mm分ss秒").format(msg.getSendTime())+"】\n";

                                                   msg.setMessage(str);

                                                   sendMsg(msg);

                                               }

                                          } catch (IOException e) {

                                               // TODO Auto-generated catch block

                                               e.printStackTrace();

                                          } catch (ClassNotFoundException e) {

                                               // TODO Auto-generated catch block

                                               e.printStackTrace();

                                          }

                                         

                                    

                                 }

                            }

                       }.start();

                   } catch (IOException e) {

                       e.printStackTrace();

                   }

              }

             

             

        }

   

     publicstaticvoid main(String[] args) {

         Server server=new Server();

         server.startServer();//启动服务器端

     }

}

客户端:import java.awt.*;

import javax.swing.*;

import javax.swing.event.ListDataEvent;

import javax.swing.event.ListDataListener;

import javax.swing.event.ListSelectionEvent;

import javax.swing.event.ListSelectionListener;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

import cn.com.tarena.domain.Message;

import java.awt.event.*;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.net.Socket;

import java.net.UnknownHostException;

import java.util.Date;

/**

 *@author   Email:wangwg@tarena.com.cn

 *@version  创建时间:20##-2-16 上午09:10:05

 *类说明: 客户端主程序

 */

publicclass Client implements ActionListener{

     JFrame jf=new JFrame("渭南师范聊吧");

     //north

     JPanel north=new JPanel();

     JMenuBar jmb=new JMenuBar();

     JMenu connect=new JMenu("connect");

     JMenu about=new JMenu("about");

     JMenuItem jmi1=new JMenuItem("连接服务器");

     JMenuItem jmi2=new JMenuItem("断开服务器");

     JMenuItem jmi3=new JMenuItem("退出");

     JMenuItem jmi4=new JMenuItem("关于小组");

     ImageIcon loginImage=

         new ImageIcon(

         Client.class.getResource("weinanlogin.jpg"));

    JLabel jl1=new JLabel(loginImage);

    //west

    JPanel west=new JPanel();

    ImageIcon westImage=new ImageIcon(

        Client.class.getResource("weinanleft.jpg"));

    JLabel jl2=new JLabel(westImage);

    DefaultListModel dlm=new DefaultListModel();

    JList userList=new JList(dlm);

    JScrollPane jsp=new JScrollPane(userList);

    //center

    JPanel center=new JPanel();

    JTextArea jta=new JTextArea();

    JScrollPane jsp1=new JScrollPane(jta);

    JLabel jl3=new JLabel("请输入消息:");

    JTextField jtf=new JTextField(40);

    JButton send=new JButton("发送");

    Socket s;

    ObjectOutputStream oos;

    String userName="游客";

    String toName;

    Message msg;

    JTextArea jta1=new JTextArea();

   

    JFrame jf2;

    JTextArea jta2=new JTextArea();

    

     JScrollPane jsp2=new JScrollPane(jta2);

    publicvoid startClient(){

        //初始化界面

        initFrame();

        //添加监听事件

        addListener();

    }

    /**

     * 具体初始化界面

     */

    publicvoid initFrame(){

       

        jf.setLayout(new BorderLayout());

        //给north添加组件

        connect.add(jmi1);

        connect.add(jmi2);

        connect.add(jmi3);

        about.add(jmi4);

        jmb.add(connect);

        jmb.add(about);

        north.setLayout(new BorderLayout());

        north.add(jmb,BorderLayout.NORTH);

        north.add(jl1,BorderLayout.CENTER);

        jf.add(north,BorderLayout.NORTH);

        //给west添加组件

        west.setLayout(new BorderLayout());

        west.add(jl2,BorderLayout.NORTH);

        userList.setBackground(Color.cyan);

        jsp.setSize(150,300);

        userList.setFixedCellWidth(150);

        userList.setFont(new Font("黑体",Font.BOLD,20));

        west.add(jsp,BorderLayout.CENTER);

        jf.add(west,BorderLayout.WEST);

        //给center添加组件

        center.setLayout(new BorderLayout());

        center.add(jsp1,BorderLayout.CENTER);

        jta.setBackground(Color.yellow);

        jta.setEditable(false);

        jta.setFont(new Font("黑体",Font.BOLD,20));

        JPanel jp=new JPanel();

        jp.setLayout(new FlowLayout());

        //两种不同方式给输入框添加回车监听

        jtf.setActionCommand("enterKey");

        /*jtf.addKeyListener(new KeyListener(){

              @Override

              public void keyPressed(KeyEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              public void keyReleased(KeyEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              public void keyTyped(KeyEvent e) {

                   // TODO Auto-generated method stub

                  

              }

            

        });*/

        jp.add(jl3);

        jp.add(jtf);

        jp.add(send);

        center.add(jp,BorderLayout.SOUTH);

        jf.add(center,BorderLayout.CENTER);

        jf.setIconImage(new ImageIcon(Client.class.getResource("qq.png")).getImage());

        jf.setSize(800,600);

        jf.setLocation(200,100);

        jf.setVisible(true);

        jf.setResizable(false);

        //给窗口红叉按钮从新添加监听事件

        jf.setDefaultCloseOperation(

                 jf.DO_NOTHING_ON_CLOSE);

        jf.addWindowListener(new WindowListener(){

              @Override

              publicvoid windowActivated(WindowEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              publicvoid windowClosed(WindowEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              publicvoid windowClosing(WindowEvent e) {

                   if(oos==null){

                      System.exit(0);

                  }

                  Message msg=new Message();

                  msg.setType("loginOut");

                  msg.setSendTime(new Date());

                  msg.setFromName(userName);

                  try {

                       oos.writeObject(msg);

                       oos.flush();

                   } catch (IOException e1) {

                       // TODO Auto-generated catch block

                       e1.printStackTrace();

                   }

                   System.exit(0);

                  

              }

              @Override

              publicvoid windowDeactivated(WindowEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              publicvoid windowDeiconified(WindowEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              publicvoid windowIconified(WindowEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              publicvoid windowOpened(WindowEvent e) {

                   // TODO Auto-generated method stub

                  

              }

            

        });

    }

    /**

     * 给组件添加监听

     */

    publicvoid addListener(){

        //给发送按钮添加监听

        send.addActionListener(this);

        //连接服务器添加监听

        jmi1.addActionListener(this);

        jmi2.addActionListener(this);

        jmi3.addActionListener(this);

        jmi4.addActionListener(this);

        jtf.addActionListener(this);

        userList.addMouseListener(new MouseListener(){

             JFrame jf1=new JFrame();

                JTextField jtf=new JTextField(10);

                  JButton jb1=new JButton("私聊发送");

                  JButton jb2=new JButton("私聊关闭");

                  Message msg1=new Message();

              @Override

              publicvoid mouseClicked(MouseEvent e) {

                   if (e.getClickCount() ==2) {

                      int index = userList.locationToIndex(e.getPoint());

                      toName=(String)(msg.getUserList()).get(index);

                      System.out.println("Double clicked on Item " + msg.getUserList().get(index));

                      JOptionPane.showMessageDialog(jf,toName);

                      msg1.setToName(toName);

                      jf1.setTitle("与"+toName+"会话中(主叫)");

                      msg1.setType("personal");

                      msg1.setSendTime(new Date());

                      msg1.setFromName(userName);

                      try {

                            oos.writeObject(msg1);

                            oos.flush();

                       } catch (IOException e1) {

                            // TODO Auto-generated catch block

                            e1.printStackTrace();

                       }

                      

                      JScrollPane jsp=new JScrollPane(jta1);

                      JPanel jp=new JPanel();

                  

                      jb1.addActionListener(new ActionListener(){

                            @Override

                            publicvoid actionPerformed(ActionEvent e) {

                                 Message msg1=new Message();

                                 msg1.setMessage(jtf.getText());

                                 jtf.setText("");

                                 msg1.setToName(toName);

                                 msg1.setFromName(userName);

                                 msg1.setSendTime(new Date());

                                 msg1.setType("personalSend");

                                

                                 try {

                                     oos.writeObject(msg1);

                                     oos.flush();

                                 } catch (IOException e1) {

                                     // TODO Auto-generated catch block

                                     e1.printStackTrace();

                                 }

                            }

                         

                      });

                      jb2.addActionListener(new ActionListener(){

                            @Override

                            publicvoid actionPerformed(ActionEvent e) {

                                 jf1.dispose();

                                 Message msg1=new Message();

                                 msg1.setFromName(userName);

                                 msg1.setSendTime(new Date());

                                 msg1.setMessage(userName+"离线了!");

                                 msg1.setType("personalSend");

                                 try {

                                     oos.writeObject(msg1);

                                     oos.flush();

                                 } catch (IOException e1) {

                                     // TODO Auto-generated catch block

                                     e1.printStackTrace();

                                 }

                            }

                         

                      });

                      jp.add(jtf);

                      jp.add(jb1);

                      jp.add(jb2);

                      jf1.add(jsp,BorderLayout.CENTER);

                      jf1.add(jp,BorderLayout.SOUTH);

                      jf1.setSize(500,400);

                      jf1.setLocation(100,300);

                       jf1.setVisible(true);

                      jf1.setResizable(false);

                      jf1.setDefaultCloseOperation(jf1.DO_NOTHING_ON_CLOSE);

                      jf1.addWindowListener(new WindowListener(){

                            @Override

                            publicvoid windowActivated(WindowEvent e) {

                                 // TODO Auto-generated method stub

                                

                            }

                            @Override

                            publicvoid windowClosed(WindowEvent e) {

                                 // TODO Auto-generated method stub

                                

                            }

                            @Override

                            publicvoid windowClosing(WindowEvent e) {

                                 System.out.println("hhhhhh");

                                 jf1.dispose();

                            }

                            @Override

                            publicvoid windowDeactivated(WindowEvent e) {

                                 // TODO Auto-generated method stub

                                

                            }

                            @Override

                            publicvoid windowDeiconified(WindowEvent e) {

                                 // TODO Auto-generated method stub

                                

                            }

                            @Override

                            publicvoid windowIconified(WindowEvent e) {

                                 // TODO Auto-generated method stub

                                

                            }

                            @Override

                            publicvoid windowOpened(WindowEvent e) {

                                 // TODO Auto-generated method stub

                                

                            }

                         

                      });

                   }

                  

              }

              @Override

              publicvoid mouseEntered(MouseEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              publicvoid mouseExited(MouseEvent e) {

                  

              }

              @Override

              publicvoid mousePressed(MouseEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              publicvoid mouseReleased(MouseEvent e) {

                   // TODO Auto-generated method stub

                  

              }

            

        });

        /*userList.addListSelectionListener(new ListSelectionListener(){

              @Override

              public void valueChanged(ListSelectionEvent e) {

                   JOptionPane.showMessageDialog(jf,e.getSource());

                  

              }

            

        });*/

        /*dlm.addListDataListener(new ListDataListener(){

              @Override

              public void contentsChanged(ListDataEvent e) {

                   System.out.println("=====++++"+e.getType());

                   JOptionPane.showMessageDialog(jf,e.getIndex0());

              }

              @Override

              public void intervalAdded(ListDataEvent e) {

                   JOptionPane.showMessageDialog(jf,e.getIndex0());

                  

              }

              @Override

              public void intervalRemoved(ListDataEvent e) {

                   // TODO Auto-generated method stub

                  

              }

            

        });*/

    }

    @Override

    publicvoid actionPerformed(ActionEvent e){

        String com=e.getActionCommand();

        if("发送".equals(com)||"enterKey".equals(com)){

              msg=new Message();

             msg.setFromName(userName);

             msg.setSendTime(new Date());

             msg.setMessage(jtf.getText());

             msg.setType("send");

             try {

                   oos.writeObject(msg);

                   oos.flush();

                   jtf.setText("");

              } catch (IOException e1) {

                   // TODO Auto-generated catch block

                   e1.printStackTrace();

              }

             System.out.println("你的操作是:"+com);

        }elseif("连接服务器".equals(com)){

             int count=0;

             do{

                 if(count>=2){

                    JOptionPane.showMessageDialog(

                              jf,"鄙视你");

                    break;

                 }

                 String ip=JOptionPane.

                showInputDialog("请输入服务器端IP:");

                int port=Integer.parseInt(

                         JOptionPane.showInputDialog("请输入服务器端口号:"));

                try {

                      s=new Socket(ip,port);//连接服务器

                 } catch (UnknownHostException e1) {

                      count++;

                      JOptionPane.showMessageDialog(

                               jf,"你输入的IP地址不对!");

                      e1.printStackTrace();

                 } catch (IOException e1) {

                      count++;

                      JOptionPane.showMessageDialog(jf, "你输入的端口号不对");

                      e1.printStackTrace();

                 }

             }while(s==null);

             if(count<2){

                 String name=JOptionPane.

                 showInputDialog("请输入用户名");

                 userName=name;

                  msg=new Message();

                 msg.setFromName(name);

                 msg.setType("login");

                 msg.setSendTime(new Date());

                 //msg.setToName();

                 try {

                       oos=new ObjectOutputStream(

                                 s.getOutputStream());

                       oos.writeObject(msg);//发送给服务器消息

                       oos.flush();

                   } catch (IOException e1) {

                       // TODO Auto-generated catch block

                       e1.printStackTrace();

                   }

                   //接收服务器端信息

                 new Thread(){

                    

                     JTextField jtf2=new JTextField(10);

                       Message msg2=new Message();

                   publicvoid run(){

                             while(true){

                                try {

                                    ObjectInputStream ois;

                                    ois=new ObjectInputStream(

                                              s.getInputStream());

                                     msg=(Message)ois.readObject();

                                     String type=msg.getType();

                                    

                                     if("login".equals(type)){

                                        List users=msg.getUserList();

                                        dlm.removeAllElements();

                                        for(int i=0;i<users.size();i++){

                                             dlm.addElement(users.get(i));

                                        }

                                        String mes=jta.getText();

                                        if(mes==null&&"".equals(mes)){

                                             jta.setText(msg.getMessage()+"\n");

                                        }else{

                                             jta.append(msg.getMessage()+"\n");

                                        }

                                     }elseif("loginOut".equals(type)){

                                          //更新用户列表

                                          //消息框清掉

                                          if(userName.equals(msg.getFromName())){

                                               //如果当前界面是要断开的用户---把用户列表和消息框全部清空

                                               dlm.removeAllElements();

                                               jta.append("您已下线,请从新连接服务器\n");

                                               break;

                                          }else{

                                               //如果当前界面不是要断开的用户---用户列表少一条记录就行,消息框提示XXX下线

                                              List users=msg.getUserList();

                                              dlm.removeAllElements();

                                              for(int i=0;i<users.size();i++){

                                                  dlm.addElement(users.get(i)+"\n");

                                              }

                                              String mes=msg.getMessage();

                                              jta.append(mes+"\n");

                                          }

                                     }elseif("send".equals(type)){

                                          String mes=msg.getMessage();

                                          jta.append(mes);

                                     }elseif("personal".equals(type)){

                                          //判断是否有人与你私聊

                                          if(userName.equals(msg.getToName())){

                                               toName=msg.getFromName();

                                               System.out.println("被叫"+msg.getFromName());

                                              jf2=new JFrame("与"+msg.getFromName()+"聊天中(被叫)");

                                              JPanel jp=new JPanel();

                                              JButton jb3=new JButton("私聊发送");

                                              JButton jb4=new JButton("私聊关闭");

                                              jb3.addActionListener(new ActionListener(){

                                                   @Override

                                                   publicvoid actionPerformed(

                                                             ActionEvent e) {

                                                        Message msg2=new Message();

                                                        msg2.setMessage("");

                                                        msg2.setMessage(jtf2.getText());

                                                        jtf2.setText("");

                                                        msg2.setSendTime(new Date());

                                                        msg2.setToName(toName);

                                                        msg2.setFromName(userName);

                                                        msg2.setType("personalSend");

                                                        try {

                                                             oos.writeObject(msg2);

                                                             oos.flush();

                                                        } catch (IOException e1) {

                                                             // TODO Auto-generated catch block

                                                             e1.printStackTrace();

                                                        }

                                                   }

                                                 

                                              });

                                              jb4.addActionListener(new ActionListener(){

                                                   @Override

                                                   publicvoid actionPerformed(

                                                             ActionEvent e) {

                                                        jf2.dispose();

                                                        msg2.setType("personalSend");

                                                        msg2.setToName(toName);

                                                        msg2.setFromName(userName);

                                                        msg2.setSendTime(new Date());

                                                        try {

                                                             oos.writeObject(msg2);

                                                             oos.flush();

                                                        } catch (IOException e1) {

                                                             // TODO Auto-generated catch block

                                                             e1.printStackTrace();

                                                        }

                                                   }

                                                 

                                              });

                                              jp.add(jtf2);

                                              jp.add(jb3);

                                              jp.add(jb4);

                                              jf2.add(jsp2,BorderLayout.CENTER);

                                              jf2.add(jp,BorderLayout.SOUTH);

                                              jf2.setSize(500,400);

                                              jf2.setLocation(400,300);

                                              jf2.setVisible(true);

                                              jf2.setResizable(false);

                                              jf2.setDefaultCloseOperation(jf2.DO_NOTHING_ON_CLOSE);

                                              jf2.addWindowListener(new WindowListener(){

                                                   @Override

                                                   publicvoid windowActivated(WindowEvent e) {

                                                        // TODO Auto-generated method stub

                                                       

                                                   }

                                                   @Override

                                                   publicvoid windowClosed(WindowEvent e) {

                                                        // TODO Auto-generated method stub

                                                       

                                                   }

                                                   @Override

                                                   publicvoid windowClosing(WindowEvent e) {

                                                        jf2.dispose();

                                                   }

                                                   @Override

                                                   publicvoid windowDeactivated(WindowEvent e) {

                                                        // TODO Auto-generated method stub

                                                       

                                                   }

                                                   @Override

                                                   publicvoid windowDeiconified(WindowEvent e) {

                                                        // TODO Auto-generated method stub

                                                       

                                                   }

                                                   @Override

                                                   publicvoid windowIconified(WindowEvent e) {

                                                        // TODO Auto-generated method stub

                                                       

                                                   }

                                                   @Override

                                                   publicvoid windowOpened(WindowEvent e) {

                                                        // TODO Auto-generated method stub

                                                       

                                                   }

                                                 

                                              });

                                               /*new Thread(){

                                                   {ObjectInputStream ois1;

                                                   ois1=new ObjectInputStream(

                                                             s.getInputStream());

                                                   }

                                               }.start();*/

                                          }

                                     }elseif("personalSend".equals(type)){

                                          System.out.println(userName+"被叫消息");

                                         System.out.println("from"+msg.getFromName()+"to"+msg.getToName());

                                     if(userName.equals(msg.getFromName())||userName.equals(msg.getToName())){

                                               System.out.println(msg.getMessage()+"---");

                                               if(jf2==null){

                                                   jta1.append(msg.getMessage());

                                               }else{

                                                   jta2.append(msg.getMessage());

                                               }

                                              

                                          }

                                     }

                                    

                                 } catch (IOException e) {

                                     // TODO Auto-generated catch block

                                     e.printStackTrace();

                                 } catch (ClassNotFoundException e) {

                                     // TODO Auto-generated catch block

                                     e.printStackTrace();

         import java.awt.*;

import javax.swing.*;

import javax.swing.event.ListDataEvent;

import javax.swing.event.ListDataListener;

import javax.swing.event.ListSelectionEvent;

import javax.swing.event.ListSelectionListener;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

import cn.com.tarena.domain.Message;

import java.awt.event.*;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.net.Socket;

import java.net.UnknownHostException;

import java.util.Date;

/**

 *@author   Email:wangwg@tarena.com.cn

 *@version  创建时间:20##-2-16 上午09:10:05

 *类说明: 客户端主程序

 */

public class Client implements ActionListener{

     JFrame jf=new JFrame("渭南师范聊吧");

     //north

     JPanel north=new JPanel();

     JMenuBar jmb=new JMenuBar();

     JMenu connect=new JMenu("connect");

     JMenu about=new JMenu("about");

     JMenuItem jmi1=new JMenuItem("连接服务器");

     JMenuItem jmi2=new JMenuItem("断开服务器");

     JMenuItem jmi3=new JMenuItem("退出");

     JMenuItem jmi4=new JMenuItem("关于小组");

     ImageIcon loginImage=

         new ImageIcon(

         Client.class.getResource("weinanlogin.jpg"));

    JLabel jl1=new JLabel(loginImage);

    //west

    JPanel west=new JPanel();

    ImageIcon westImage=new ImageIcon(

        Client.class.getResource("weinanleft.jpg"));

    JLabel jl2=new JLabel(westImage);

    DefaultListModel dlm=new DefaultListModel();

    JList userList=new JList(dlm);

    JScrollPane jsp=new JScrollPane(userList);

    //center

    JPanel center=new JPanel();

    JTextArea jta=new JTextArea();

    JScrollPane jsp1=new JScrollPane(jta);

    JLabel jl3=new JLabel("请输入消息:");

    JTextField jtf=new JTextField(40);

    JButton send=new JButton("发送");

    Socket s;

    ObjectOutputStream oos;

    String userName="游客";

    String toName;

    Message msg;

    JTextArea jta1=new JTextArea();

   

    JFrame jf2;

    JTextArea jta2=new JTextArea();

    

     JScrollPane jsp2=new JScrollPane(jta2);

    public void startClient(){

        //初始化界面

        initFrame();

        //添加监听事件

        addListener();

    }

    /**

     * 具体初始化界面

     */

    public void initFrame(){

       

        jf.setLayout(new BorderLayout());

        //给north添加组件

        connect.add(jmi1);

        connect.add(jmi2);

        connect.add(jmi3);

        about.add(jmi4);

        jmb.add(connect);

        jmb.add(about);

        north.setLayout(new BorderLayout());

        north.add(jmb,BorderLayout.NORTH);

        north.add(jl1,BorderLayout.CENTER);

        jf.add(north,BorderLayout.NORTH);

        //给west添加组件

        west.setLayout(new BorderLayout());

        west.add(jl2,BorderLayout.NORTH);

        userList.setBackground(Color.cyan);

        jsp.setSize(150,300);

        userList.setFixedCellWidth(150);

        userList.setFont(new Font("黑体",Font.BOLD,20));

        west.add(jsp,BorderLayout.CENTER);

        jf.add(west,BorderLayout.WEST);

        //给center添加组件

        center.setLayout(new BorderLayout());

        center.add(jsp1,BorderLayout.CENTER);

        jta.setBackground(Color.yellow);

        jta.setEditable(false);

        jta.setFont(new Font("黑体",Font.BOLD,20));

        JPanel jp=new JPanel();

        jp.setLayout(new FlowLayout());

        //两种不同方式给输入框添加回车监听

        jtf.setActionCommand("enterKey");

        /*jtf.addKeyListener(new KeyListener(){

              @Override

              public void keyPressed(KeyEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              public void keyReleased(KeyEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              public void keyTyped(KeyEvent e) {

                   // TODO Auto-generated method stub

                  

              }

            

        });*/

        jp.add(jl3);

        jp.add(jtf);

        jp.add(send);

        center.add(jp,BorderLayout.SOUTH);

        jf.add(center,BorderLayout.CENTER);

        jf.setIconImage(new ImageIcon(Client.class.getResource("qq.png")).getImage());

        jf.setSize(800,600);

        jf.setLocation(200,100);

        jf.setVisible(true);

        jf.setResizable(false);

        //给窗口红叉按钮从新添加监听事件

        jf.setDefaultCloseOperation(

                 jf.DO_NOTHING_ON_CLOSE);

        jf.addWindowListener(new WindowListener(){

              @Override

              public void windowActivated(WindowEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              public void windowClosed(WindowEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              public void windowClosing(WindowEvent e) {

                   if(oos==null){

                      System.exit(0);

                  }

                  Message msg=new Message();

                  msg.setType("loginOut");

                  msg.setSendTime(new Date());

                  msg.setFromName(userName);

                  try {

                       oos.writeObject(msg);

                       oos.flush();

                   } catch (IOException e1) {

                       // TODO Auto-generated catch block

                       e1.printStackTrace();

                   }

                   System.exit(0);

                  

              }

              @Override

              public void windowDeactivated(WindowEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              public void windowDeiconified(WindowEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              public void windowIconified(WindowEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              public void windowOpened(WindowEvent e) {

                   // TODO Auto-generated method stub

                  

              }

            

        });

    }

    /**

     * 给组件添加监听

     */

    public void addListener(){

        //给发送按钮添加监听

        send.addActionListener(this);

        //连接服务器添加监听

        jmi1.addActionListener(this);

        jmi2.addActionListener(this);

        jmi3.addActionListener(this);

        jmi4.addActionListener(this);

        jtf.addActionListener(this);

        userList.addMouseListener(new MouseListener(){

             JFrame jf1=new JFrame();

                JTextField jtf=new JTextField(10);

                  JButton jb1=new JButton("私聊发送");

                  JButton jb2=new JButton("私聊关闭");

                  Message msg1=new Message();

              @Override

              public void mouseClicked(MouseEvent e) {

                   if (e.getClickCount() ==2) {

                      int index = userList.locationToIndex(e.getPoint());

                      toName=(String)(msg.getUserList()).get(index);

                      System.out.println("Double clicked on Item " + msg.getUserList().get(index));

                      JOptionPane.showMessageDialog(jf,toName);

                      msg1.setToName(toName);

                      jf1.setTitle("与"+toName+"会话中(主叫)");

                      msg1.setType("personal");

                      msg1.setSendTime(new Date());

                      msg1.setFromName(userName);

                      try {

                            oos.writeObject(msg1);

                            oos.flush();

                       } catch (IOException e1) {

                            // TODO Auto-generated catch block

                            e1.printStackTrace();

                       }

                     

                      JScrollPane jsp=new JScrollPane(jta1);

                      JPanel jp=new JPanel();

                  

                      jb1.addActionListener(new ActionListener(){

                            @Override

                            public void actionPerformed(ActionEvent e) {

                                 Message msg1=new Message();

                                 msg1.setMessage(jtf.getText());

                                 jtf.setText("");

                                 msg1.setToName(toName);

                                 msg1.setFromName(userName);

                                 msg1.setSendTime(new Date());

                                 msg1.setType("personalSend");

                                

                                 try {

                                     oos.writeObject(msg1);

                                     oos.flush();

                                 } catch (IOException e1) {

                                     // TODO Auto-generated catch block

                                     e1.printStackTrace();

                                 }

                            }

                         

                      });

                      jb2.addActionListener(new ActionListener(){

                            @Override

                            public void actionPerformed(ActionEvent e) {

                                 jf1.dispose();

                                 Message msg1=new Message();

                                 msg1.setFromName(userName);

                                 msg1.setSendTime(new Date());

                                 msg1.setMessage(userName+"离线了!");

                                 msg1.setType("personalSend");

                                 try {

                                     oos.writeObject(msg1);

                                     oos.flush();

                                 } catch (IOException e1) {

                                     // TODO Auto-generated catch block

                                     e1.printStackTrace();

                                 }

                            }

                         

                      });

                      jp.add(jtf);

                      jp.add(jb1);

                      jp.add(jb2);

                      jf1.add(jsp,BorderLayout.CENTER);

                      jf1.add(jp,BorderLayout.SOUTH);

                      jf1.setSize(500,400);

                      jf1.setLocation(100,300);

                      jf1.setVisible(true);

                      jf1.setResizable(false);

                      jf1.setDefaultCloseOperation(jf1.DO_NOTHING_ON_CLOSE);

                      jf1.addWindowListener(new WindowListener(){

                            @Override

                            public void windowActivated(WindowEvent e) {

                                 // TODO Auto-generated method stub

                                

                            }

                            @Override

                            public void windowClosed(WindowEvent e) {

                                 // TODO Auto-generated method stub

                                

                            }

                            @Override

                            public void windowClosing(WindowEvent e) {

                                 System.out.println("hhhhhh");

                                 jf1.dispose();

                            }

                            @Override

                            public void windowDeactivated(WindowEvent e) {

                                 // TODO Auto-generated method stub

                                

                            }

                            @Override

                            public void windowDeiconified(WindowEvent e) {

                                 // TODO Auto-generated method stub

                                

                            }

                            @Override

                            public void windowIconified(WindowEvent e) {

                                 // TODO Auto-generated method stub

                                

                            }

                            @Override

                            public void windowOpened(WindowEvent e) {

                                 // TODO Auto-generated method stub

                                

                            }

                         

                      });

                   }

                  

              }

              @Override

              public void mouseEntered(MouseEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              public void mouseExited(MouseEvent e) {

                  

              }

              @Override

              public void mousePressed(MouseEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              public void mouseReleased(MouseEvent e) {

                   // TODO Auto-generated method stub

                  

              }

            

        });

        /*userList.addListSelectionListener(new ListSelectionListener(){

              @Override

              public void valueChanged(ListSelectionEvent e) {

                   JOptionPane.showMessageDialog(jf,e.getSource());

                  

              }

            

        });*/

        /*dlm.addListDataListener(new ListDataListener(){

              @Override

              public void contentsChanged(ListDataEvent e) {

                   System.out.println("=====++++"+e.getType());

                   JOptionPane.showMessageDialog(jf,e.getIndex0());

              }

              @Override

              public void intervalAdded(ListDataEvent e) {

                   JOptionPane.showMessageDialog(jf,e.getIndex0());

                  

              }

              @Override

              public void intervalRemoved(ListDataEvent e) {

                   // TODO Auto-generated method stub

                  

              }

            

        });*/

    }

    @Override

    public void actionPerformed(ActionEvent e){

        String com=e.getActionCommand();

        if("发送".equals(com)||"enterKey".equals(com)){

              msg=new Message();

             msg.setFromName(userName);

             msg.setSendTime(new Date());

             msg.setMessage(jtf.getText());

             msg.setType("send");

             try {

                   oos.writeObject(msg);

                   oos.flush();

                   jtf.setText("");

              } catch (IOException e1) {

                   // TODO Auto-generated catch block

                   e1.printStackTrace();

              }

             System.out.println("你的操作是:"+com);

        }else if("连接服务器".equals(com)){

             int count=0;

             do{

                 if(count>=2){

                    JOptionPane.showMessageDialog(

                              jf,"鄙视你");

                    break;

                 }

                 String ip=JOptionPane.

                showInputDialog("请输入服务器端IP:");

                int port=Integer.parseInt(

                         JOptionPane.showInputDialog("请输入服务器端口号:"));

                try {

                      s=new Socket(ip,port);//连接服务器

                 } catch (UnknownHostException e1) {

                      count++;

                      JOptionPane.showMessageDialog(

                               jf,"你输入的IP地址不对!");

                      e1.printStackTrace();

                 } catch (IOException e1) {

                      count++;

                      JOptionPane.showMessageDialog(jf, "你输入的端口号不对");

                      e1.printStackTrace();

                 }

             }while(s==null);

             if(count<2){

                 String name=JOptionPane.

                 showInputDialog("请输入用户名");

                 userName=name;

                  msg=new Message();

                 msg.setFromName(name);

                 msg.setType("login");

                 msg.setSendTime(new Date());

                 //msg.setToName();

                 try {

                       oos=new ObjectOutputStream(

                                 s.getOutputStream());

                       oos.writeObject(msg);//发送给服务器消息

                       oos.flush();

                   } catch (IOException e1) {

                       // TODO Auto-generated catch block

                       e1.printStackTrace();

                   }

                   //接收服务器端信息

                 new Thread(){

                    

                     JTextField jtf2=new JTextField(10);

                       Message msg2=new Message();

                   public void run(){

                             while(true){

                                try {

                                    ObjectInputStream ois;

                                    ois=new ObjectInputStream(

                                              s.getInputStream());

                                     msg=(Message)ois.readObject();

                                     String type=msg.getType();

                                    

                                     if("login".equals(type)){

                                        List users=msg.getUserList();

                                        dlm.removeAllElements();

                                        for(int i=0;i<users.size();i++){

                                             dlm.addElement(users.get(i));

                                        }

                                        String mes=jta.getText();

                                        if(mes==null&&"".equals(mes)){

                                             jta.setText(msg.getMessage()+"\n");

                                        }else{

                                             jta.append(msg.getMessage()+"\n");

                                        }

                                     }else if("loginOut".equals(type)){

                                          //更新用户列表

                                          //消息框清掉

                                          if(userName.equals(msg.getFromName())){

                                               //如果当前界面是要断开的用户---把用户列表和消息框全部清空

                                               dlm.removeAllElements();

                                               jta.append("您已下线,请从新连接服务器\n");

                                               break;

                                          }else{

                                               //如果当前界面不是要断开的用户---用户列表少一条记录就行,消息框提示XXX下线

                                              List users=msg.getUserList();

                                              dlm.removeAllElements();

                                              for(int i=0;i<users.size();i++){

                                                  dlm.addElement(users.get(i)+"\n");

                                              }

                                              String mes=msg.getMessage();

                                              jta.append(mes+"\n");

                                          }

                                     }else if("send".equals(type)){

                                          String mes=msg.getMessage();

                                          jta.append(mes);

                                     }else if("personal".equals(type)){

                                          //判断是否有人与你私聊

                                          if(userName.equals(msg.getToName())){

                                               toName=msg.getFromName();

                                               System.out.println("被叫"+msg.getFromName());

                                              jf2=new JFrame("与"+msg.getFromName()+"聊天中(被叫)");

                                              JPanel jp=new JPanel();

                                              JButton jb3=new JButton("私聊发送");

                                              JButton jb4=new JButton("私聊关闭");

                                              jb3.addActionListener(new ActionListener(){

                                                   @Override

                                                   public void actionPerformed(

                                                             ActionEvent e) {

                                                        Message msg2=new Message();

                                                        msg2.setMessage("");

                                                        msg2.setMessage(jtf2.getText());

                                                        jtf2.setText("");

                                                        msg2.setSendTime(new Date());

                                                        msg2.setToName(toName);

                                                        msg2.setFromName(userName);

                                                        msg2.setType("personalSend");

                                                        try {

                                                             oos.writeObject(msg2);

                                                             oos.flush();

                                                        } catch (IOException e1) {

                                                             // TODO Auto-generated catch block

                                                             e1.printStackTrace();

                                                        }

                                                   }

                                                 

                                              });

                                              jb4.addActionListener(new ActionListener(){

                                                   @Override

                                                   public void actionPerformed(

                                                            ActionEvent e) {

                                                        jf2.dispose();

                                                        msg2.setType("personalSend");

                                                        msg2.setToName(toName);

                                                        msg2.setFromName(userName);

                                                        msg2.setSendTime(new Date());

                                                        try {

                                                             oos.writeObject(msg2);

                                                             oos.flush();

                                                        } catch (IOException e1) {

                                                             // TODO Auto-generated catch block

                                                             e1.printStackTrace();

                                                        }

                                                   }

                                                 

                                              });

                                              jp.add(jtf2);

                                              jp.add(jb3);

                                              jp.add(jb4);

                                              jf2.add(jsp2,BorderLayout.CENTER);

                                              jf2.add(jp,BorderLayout.SOUTH);

                                              jf2.setSize(500,400);

                                              jf2.setLocation(400,300);

                                              jf2.setVisible(true);

                                              jf2.setResizable(false);

                                              jf2.setDefaultCloseOperation(jf2.DO_NOTHING_ON_CLOSE);

                                              jf2.addWindowListener(new WindowListener(){

                                                   @Override

                                                   public void windowActivated(WindowEvent e) {

                                                        // TODO Auto-generated method stub

                                                       

                                                   }

                                                   @Override

                                                   public void windowClosed(WindowEvent e) {

                                                        // TODO Auto-generated method stub

                                                       

                                                   }

                                                   @Override

                                                   public void windowClosing(WindowEvent e) {

                                                        jf2.dispose();

                                                   }

                                                   @Override

                                                   public void windowDeactivated(WindowEvent e) {

                                                        // TODO Auto-generated method stub

                                                       

                                                   }

                                                   @Override

                                                   public void windowDeiconified(WindowEvent e) {

                                                        // TODO Auto-generated method stub

                                                       

                                                   }

                                                   @Override

                                                   public void windowIconified(WindowEvent e) {

                                                        // TODO Auto-generated method stub

                                                       

                                                   }

                                                   @Override

                                                   public void windowOpened(WindowEvent e) {

                                                        // TODO Auto-generated method stub

                                                       

                                                   }

                                                 

                                              });

                                               /*new Thread(){

                                                   {ObjectInputStream ois1;

                                                   ois1=new ObjectInputStream(

                                                             s.getInputStream());

                                                   }

                                               }.start();*/

                                          }

                                     }else if("personalSend".equals(type)){

                                          System.out.println(userName+"被叫消息");

                                         System.out.println("from"+msg.getFromName()+"to"+msg.getToName());

                                     if(userName.equals(msg.getFromName())||userName.equals(msg.getToName())){

                                               System.out.println(msg.getimport java.awt.*;

import javax.swing.*;

import javax.swing.event.ListDataEvent;

import javax.swing.event.ListDataListener;

import javax.swing.event.ListSelectionEvent;

import javax.swing.event.ListSelectionListener;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

import cn.com.tarena.domain.Message;

import java.awt.event.*;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.net.Socket;

import java.net.UnknownHostException;

import java.util.Date;

/**

 *@author   Email:wangwg@tarena.com.cn

 *@version  创建时间:20##-2-16 上午09:10:05

 *类说明: 客户端主程序

 */

public class Client implements ActionListener{

     JFrame jf=new JFrame("渭南师范聊吧");

     //north

     JPanel north=new JPanel();

     JMenuBar jmb=new JMenuBar();

     JMenu connect=new JMenu("connect");

     JMenu about=new JMenu("about");

     JMenuItem jmi1=new JMenuItem("连接服务器");

     JMenuItem jmi2=new JMenuItem("断开服务器");

     JMenuItem jmi3=new JMenuItem("退出");

     JMenuItem jmi4=new JMenuItem("关于小组");

     ImageIcon loginImage=

         new ImageIcon(

         Client.class.getResource("weinanlogin.jpg"));

    JLabel jl1=new JLabel(loginImage);

    //west

    JPanel west=new JPanel();

    ImageIcon westImage=new ImageIcon(

        Client.class.getResource("weinanleft.jpg"));

    JLabel jl2=new JLabel(westImage);

    DefaultListModel dlm=new DefaultListModel();

    JList userList=new JList(dlm);

    JScrollPane jsp=new JScrollPane(userList);

    //center

    JPanel center=new JPanel();

    JTextArea jta=new JTextArea();

    JScrollPane jsp1=new JScrollPane(jta);

    JLabel jl3=new JLabel("请输入消息:");

    JTextField jtf=new JTextField(40);

    JButton send=new JButton("发送");

    Socket s;

    ObjectOutputStream oos;

    String userName="游客";

    String toName;

    Message msg;

    JTextArea jta1=new JTextArea();

   

    JFrame jf2;

    JTextArea jta2=new JTextArea();

    

     JScrollPane jsp2=new JScrollPane(jta2);

    public void startClient(){

        //初始化界面

        initFrame();

        //添加监听事件

        addListener();

    }

    /**

     * 具体初始化界面

     */

    public void initFrame(){

       

        jf.setLayout(new BorderLayout());

        //给north添加组件

        connect.add(jmi1);

        connect.add(jmi2);

        connect.add(jmi3);

        about.add(jmi4);

        jmb.add(connect);

        jmb.add(about);

        north.setLayout(new BorderLayout());

        north.add(jmb,BorderLayout.NORTH);

        north.add(jl1,BorderLayout.CENTER);

        jf.add(north,BorderLayout.NORTH);

        //给west添加组件

        west.setLayout(new BorderLayout());

        west.add(jl2,BorderLayout.NORTH);

        userList.setBackground(Color.cyan);

        jsp.setSize(150,300);

        userList.setFixedCellWidth(150);

        userList.setFont(new Font("黑体",Font.BOLD,20));

        west.add(jsp,BorderLayout.CENTER);

        jf.add(west,BorderLayout.WEST);

        //给center添加组件

        center.setLayout(new BorderLayout());

        center.add(jsp1,BorderLayout.CENTER);

        jta.setBackground(Color.yellow);

        jta.setEditable(false);

        jta.setFont(new Font("黑体",Font.BOLD,20));

        JPanel jp=new JPanel();

        jp.setLayout(new FlowLayout());

        //两种不同方式给输入框添加回车监听

        jtf.setActionCommand("enterKey");

        /*jtf.addKeyListener(new KeyListener(){

              @Override

              public void keyPressed(KeyEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              public void keyReleased(KeyEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              public void keyTyped(KeyEvent e) {

                   // TODO Auto-generated method stub

                  

              }

            

        });*/

        jp.add(jl3);

        jp.add(jtf);

        jp.add(send);

        center.add(jp,BorderLayout.SOUTH);

        jf.add(center,BorderLayout.CENTER);

        jf.setIconImage(new ImageIcon(Client.class.getResource("qq.png")).getImage());

        jf.setSize(800,600);

        jf.setLocation(200,100);

        jf.setVisible(true);

        jf.setResizable(false);

        //给窗口红叉按钮从新添加监听事件

        jf.setDefaultCloseOperation(

                 jf.DO_NOTHING_ON_CLOSE);

        jf.addWindowListener(new WindowListener(){

              @Override

              public void windowActivated(WindowEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              public void windowClosed(WindowEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              public void windowClosing(WindowEvent e) {

                   if(oos==null){

                      System.exit(0);

                  }

                  Message msg=new Message();

                  msg.setType("loginOut");

                  msg.setSendTime(new Date());

                  msg.setFromName(userName);

                  try {

                       oos.writeObject(msg);

                       oos.flush();

                   } catch (IOException e1) {

                       // TODO Auto-generated catch block

                       e1.printStackTrace();

                   }

                   System.exit(0);

                  

              }

              @Override

              public void windowDeactivated(WindowEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              public void windowDeiconified(WindowEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              public void windowIconified(WindowEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              public void windowOpened(WindowEvent e) {

                   // TODO Auto-generated method stub

                  

              }

            

        });

    }

    /**

     * 给组件添加监听

     */

    public void addListener(){

        //给发送按钮添加监听

        send.addActionListener(this);

        //连接服务器添加监听

        jmi1.addActionListener(this);

        jmi2.addActionListener(this);

        jmi3.addActionListener(this);

        jmi4.addActionListener(this);

        jtf.addActionListener(this);

        userList.addMouseListener(new MouseListener(){

             JFrame jf1=new JFrame();

                JTextField jtf=new JTextField(10);

                  JButton jb1=new JButton("私聊发送");

                  JButton jb2=new JButton("私聊关闭");

                  Message msg1=new Message();

              @Override

              public void mouseClicked(MouseEvent e) {

                   if (e.getClickCount() ==2) {

                      int index = userList.locationToIndex(e.getPoint());

                      toName=(String)(msg.getUserList()).get(index);

                      System.out.println("Double clicked on Item " + msg.getUserList().get(index));

                      JOptionPane.showMessageDialog(jf,toName);

                      msg1.setToName(toName);

                      jf1.setTitle("与"+toName+"会话中(主叫)");

                      msg1.setType("personal");

                      msg1.setSendTime(new Date());

                      msg1.setFromName(userName);

                      try {

                            oos.writeObject(msg1);

                            oos.flush();

                       } catch (IOException e1) {

                            // TODO Auto-generated catch block

                            e1.printStackTrace();

                       }

                     

                      JScrollPane jsp=new JScrollPane(jta1);

                      JPanel jp=new JPanel();

                  

                      jb1.addActionListener(new ActionListener(){

                            @Override

                            public void actionPerformed(ActionEvent e) {

                                 Message msg1=new Message();

                                 msg1.setMessage(jtf.getText());

                                 jtf.setText("");

                                 msg1.setToName(toName);

                                 msg1.setFromName(userName);

                                 msg1.setSendTime(new Date());

                                 msg1.setType("personalSend");

                                

                                 try {

                                     oos.writeObject(msg1);

                                     oos.flush();

                                 } catch (IOException e1) {

                                     // TODO Auto-generated catch block

                                     e1.printStackTrace();

                                 }

                            }

                         

                      });

                      jb2.addActionListener(new ActionListener(){

                            @Override

                            public void actionPerformed(ActionEvent e) {

                                 jf1.dispose();

                                 Message msg1=new Message();

                                 msg1.setFromName(userName);

                                 msg1.setSendTime(new Date());

                                 msg1.setMessage(userName+"离线了!");

                                 msg1.setType("personalSend");

                                 try {

                                     oos.writeObject(msg1);

                                     oos.flush();

                                 } catch (IOException e1) {

                                     // TODO Auto-generated catch block

                                     e1.printStackTrace();

                                 }

                            }

                         

                      });

                      jp.add(jtf);

                      jp.add(jb1);

                      jp.add(jb2);

                      jf1.add(jsp,BorderLayout.CENTER);

                      jf1.add(jp,BorderLayout.SOUTH);

                      jf1.setSize(500,400);

                      jf1.setLocation(100,300);

                      jf1.setVisible(true);

                      jf1.setResizable(false);

                      jf1.setDefaultCloseOperation(jf1.DO_NOTHING_ON_CLOSE);

                      jf1.addWindowListener(new WindowListener(){

                            @Override

                            public void windowActivated(WindowEvent e) {

                                 // TODO Auto-generated method stub

                                

                            }

                            @Override

                            public void windowClosed(WindowEvent e) {

                                 // TODO Auto-generated method stub

                                

                            }

                            @Override

                            public void windowClosing(WindowEvent e) {

                                 System.out.println("hhhhhh");

                                 jf1.dispose();

                            }

                            @Override

                            public void windowDeactivated(WindowEvent e) {

                                 // TODO Auto-generated method stub

                                

                            }

                            @Override

                            public void windowDeiconified(WindowEvent e) {

                                 // TODO Auto-generated method stub

                                

                            }

                            @Override

                            public void windowIconified(WindowEvent e) {

                                 // TODO Auto-generated method stub

                                

                            }

                            @Override

                            public void windowOpened(WindowEvent e) {

                                 // TODO Auto-generated method stub

                                

                            }

                         

                      });

                   }

                  

              }

              @Override

              public void mouseEntered(MouseEvent e) {

                   // TODO Auto-generated method stub

                   import java.awt.*;

import javax.swing.*;

import javax.swing.event.ListDataEvent;

import javax.swing.event.ListDataListener;

import javax.swing.event.ListSelectionEvent;

import javax.swing.event.ListSelectionListener;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

import cn.com.tarena.domain.Message;

import java.awt.event.*;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.net.Socket;

import java.net.UnknownHostException;

import java.util.Date;

/**

 *@author   Email:wangwg@tarena.com.cn

 *@version  创建时间:20##-2-16 上午09:10:05

 *类说明: 客户端主程序

 */

public class Client implements ActionListener{

     JFrame jf=new JFrame("渭南师范聊吧");

     //north

     JPanel north=new JPanel();

     JMenuBar jmb=new JMenuBar();

     JMenu connect=new JMenu("connect");

     JMenu about=new JMenu("about");

     JMenuItem jmi1=new JMenuItem("连接服务器");

     JMenuItem jmi2=new JMenuItem("断开服务器");

     JMenuItem jmi3=new JMenuItem("退出");

     JMenuItem jmi4=new JMenuItem("关于小组");

     ImageIcon loginImage=

         new ImageIcon(

         Client.class.getResource("weinanlogin.jpg"));

    JLabel jl1=new JLabel(loginImage);

    //west

    JPanel west=new JPanel();

    ImageIcon westImage=new ImageIcon(

        Client.class.getResource("weinanleft.jpg"));

    JLabel jl2=new JLabel(westImage);

    DefaultListModel dlm=new DefaultListModel();

    JList userList=new JList(dlm);

    JScrollPane jsp=new JScrollPane(userList);

    //center

    JPanel center=new JPanel();

    JTextArea jta=new JTextArea();

    JScrollPane jsp1=new JScrollPane(jta);

    JLabel jl3=new JLabel("请输入消息:");

    JTextField jtf=new JTextField(40);

    JButton send=new JButton("发送");

    Socket s;

    ObjectOutputStream oos;

    String userName="游客";

    String toName;

    Message msg;

    JTextArea jta1=new JTextArea();

   

    JFrame jf2;

    JTextArea jta2=new JTextArea();

    

     JScrollPane jsp2=new JScrollPane(jta2);

    public void startClient(){

        //初始化界面

        initFrame();

        //添加监听事件

        addListener();

    }

    /**

     * 具体初始化界面

     */

    public void initFrame(){

       

        jf.setLayout(new BorderLayout());

        //给north添加组件

        connect.add(jmi1);

        connect.add(jmi2);

        connect.add(jmi3);

        about.add(jmi4);

        jmb.add(connect);

        jmb.add(about);

        north.setLayout(new BorderLayout());

        north.add(jmb,BorderLayout.NORTH);

        north.add(jl1,BorderLayout.CENTER);

        jf.add(north,BorderLayout.NORTH);

        //给west添加组件

        west.setLayout(new BorderLayout());

        west.add(jl2,BorderLayout.NORTH);

        userList.setBackground(Color.cyan);

        jsp.setSize(150,300);

        userList.setFixedCellWidth(150);

        userList.setFont(new Font("黑体",Font.BOLD,20));

        west.add(jsp,BorderLayout.CENTER);

        jf.add(west,BorderLayout.WEST);

        //给center添加组件

        center.setLayout(new BorderLayout());

        center.add(jsp1,BorderLayout.CENTER);

        jta.setBackground(Color.yellow);

        jta.setEditable(false);

        jta.setFont(new Font("黑体",Font.BOLD,20));

        JPanel jp=new JPanel();

        jp.setLayout(new FlowLayout());

        //两种不同方式给输入框添加回车监听

        jtf.setActionCommand("enterKey");

        /*jtf.addKeyListener(new KeyListener(){

              @Override

              public void keyPressed(KeyEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              public void keyReleased(KeyEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              public void keyTyped(KeyEvent e) {

                   // TODO Auto-generated method stub

                  

              }

            

        });*/

        jp.add(jl3);

        jp.add(jtf);

        jp.add(send);

        center.add(jp,BorderLayout.SOUTH);

        jf.add(center,BorderLayout.CENTER);

        jf.setIconImage(new ImageIcon(Client.class.getResource("qq.png")).getImage());

        jf.setSize(800,600);

        jf.setLocation(200,100);

        jf.setVisible(true);

        jf.setResizable(false);

        //给窗口红叉按钮从新添加监听事件

        jf.setDefaultCloseOperation(

                 jf.DO_NOTHING_ON_CLOSE);

        jf.addWindowListener(new WindowListener(){

              @Override

              public void windowActivated(WindowEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              public void windowClosed(WindowEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              public void windowClosing(WindowEvent e) {

                   if(oos==null){

                      System.exit(0);

                  }

                  Message msg=new Message();

                  msg.setType("loginOut");

                  msg.setSendTime(new Date());

                  msg.setFromName(userName);

                  try {

                       oos.writeObject(msg);

                       oos.flush();

                   } catch (IOException e1) {

                       // TODO Auto-generated catch block

                       e1.printStackTrace();

                   }

                   System.exit(0);

                  

              }

              @Override

              public void windowDeactivated(WindowEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              public void windowDeiconified(WindowEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              public void windowIconified(WindowEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              public void windowOpened(WindowEvent e) {

                   // TODO Auto-generated method stub

                  

              }

            

        });

    }

    /**

     * 给组件添加监听

     */

    public void addListener(){

        //给发送按钮添加监听

        send.addActionListener(this);

        //连接服务器添加监听

        jmi1.addActionListener(this);

        jmi2.addActionListener(this);

        jmi3.addActionListener(this);

        jmi4.addActionListener(this);

        jtf.addActionListener(this);

        userList.addMouseListener(new MouseListener(){

             JFrame jf1=new JFrame();

                JTextField jtf=new JTextField(10);

                  JButton jb1=new JButton("私聊发送");

                  JButton jb2=new JButton("私聊关闭");

                  Message msg1=new Message();

              @Override

              public void mouseClicked(MouseEvent e) {

                   if (e.getClickCount() ==2) {

                      int index = userList.locationToIndex(e.getPoint());

                      toName=(String)(msg.getUserList()).get(index);

                      System.out.println("Double clicked on Item " + msg.getUserList().get(index));

                      JOptionPane.showMessageDialog(jf,toName);

                      msg1.setToName(toName);

                      jf1.setTitle("与"+toName+"会话中(主叫)");

                      msg1.setType("personal");

                      msg1.setSendTime(new Date());

                      msg1.setFromName(userName);

                      try {

                            oos.writeObject(msg1);

                            oos.flush();

                       } catch (IOException e1) {

                            // TODO Auto-generated catch block

                            e1.printStackTrace();

                       }

                     

                      JScrollPane jsp=new JScrollPane(jta1);

                      JPanel jp=new JPanel();

                  

                      jb1.addActionListener(new ActionListener(){

                            @Override

                            public void actionPerformed(ActionEvent e) {

                                 Message msg1=new Message();

                                 msg1.setMessage(jtf.getText());

                                 jtf.setText("");

                                 msg1.setToName(toName);

                                 msg1.setFromName(userName);

                                 msg1.setSendTime(new Date());

                                 msg1.setType("personalSend");

                                

                                 try {

                                     oos.writeObject(msg1);

                                     oos.flush();

                                 } catch (IOException e1) {

                                     // TODO Auto-generated catch block

                                     e1.printStackTrace();

                                 }

                            }

                         

                      });

                      jb2.addActionListener(new ActionListener(){

                            @Override

                            public void actionPerformed(ActionEvent e) {

                                 jf1.dispose();

                                 Message msg1=new Message();

                                 msg1.setFromName(userName);

                                 msg1.setSendTime(new Date());

                                 msg1.setMessage(userName+"离线了!");

                                 msg1.setType("personalSend");

                                 try {

                                     oos.writeObject(msg1);

                                     oos.flush();

                                 } catch (IOException e1) {

                                     // TODO Auto-generated catch block

                                     e1.printStackTrace();

                                 }

                            }

                         

                      });

                      jp.add(jtf);

                      jp.add(jb1);

                      jp.add(jb2);

                      jf1.add(jsp,BorderLayout.CENTER);

                      jf1.add(jp,BorderLayout.SOUTH);

                      jf1.setSize(500,400);

                      jf1.setLocation(100,300);

                      jf1.setVisible(true);

                      jf1.setResizable(false);

                      jf1.setDefaultCloseOperation(jf1.DO_NOTHING_ON_CLOSE);

                      jf1.addWindowListener(new WindowListener(){

                            @Override

                            public void windowActivated(WindowEvent e) {

                                 // TODO Auto-generated method stub

                                

                            }

                            @Override

                            public void windowClosed(WindowEvent e) {

                                 // TODO Auto-generated method stub

                                

                            }

                            @Override

                            public void windowClosing(WindowEvent e) {

                                 System.out.println("hhhhhh");

                                 jf1.dispose();

                            }

                            @Override

                            public void windowDeactivated(WindowEvent e) {

                                 // TODO Auto-generated method stub

                                

                            }

                            @Override

                            public void windowDeiconified(WindowEvent e) {

                                 // TODO Auto-generated method stub

                                

                            }

                            @Override

                            public void windowIconified(WindowEvent e) {

                                 // TODO Auto-generated method stub

                                

                            }

                            @Override

                            public void windowOpened(WindowEvent e) {

                                 // TODO Auto-generated method stub

                                

                            }

                         

                      });

                   }

                  

              }

              @Override

              public void mouseEntered(MouseEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              public void mouseExited(MouseEvent e) {

                  

              }

              @Override

              public void mousePressed(MouseEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              public void mouseReleased(MouseEvent e) {

                   // TODO Auto-generated method stub

                  

              }

            

        });

        /*userList.addListSelectionListener(new ListSelectionListener(){

              @Override

              public void valueChanged(ListSelectionEvent e) {

                   JOptionPane.showMessageDialog(jf,e.getSource());

                  

              }

            

        });*/

        /*dlm.addListDataListener(new ListDataListener(){

              @Override

              public void contentsChanged(ListDataEvent e) {

                   System.out.println("=====++++"+e.getType());

                   JOptionPane.showMessageDialog(jf,e.getIndex0());

              }

              @Override

              public void intervalAdded(ListDataEvent e) {

                   JOptionPane.showMessageDialog(jf,e.getIndex0());

                  

              }

              @Override

              public void intervalRemoved(ListDataEvent e) {

                   // TODO Auto-generated method stub

                  

              }

            

        });*/

    }

    @Override

    public void actionPerformed(ActionEvent e){

        String com=e.getActionCommand();

        if("发送".equals(com)||"enterKey".equals(com)){

              msg=new Message();

             msg.setFromName(userName);

             msg.setSendTime(new Date());

             msg.setMessage(jtf.getText());

             msg.setType("send");

             try {

                   oos.writeObject(msg);

                   oos.flush();

                   jtf.setText("");

              } catch (IOException e1) {

                   // TODO Auto-generated catch block

                   e1.printStackTrace();

              }

             System.out.println("你的操作是:"+com);

        }else if("连接服务器".equals(com)){

             int count=0;

             do{

                 if(count>=2){

                    JOptionPane.showMessageDialog(

                              jf,"鄙视你");

                    break;

                 }

                 String ip=JOptionPane.

                showInputDialog("请输入服务器端IP:");

                int port=Integer.parseInt(

                         JOptionPane.showInputDialog("请输入服务器端口号:"));

                try {

                      s=new Socket(ip,port);//连接服务器

                 } catch (UnknownHostException e1) {

                      count++;

                      JOptionPane.showMessageDialog(

                               jf,"你输入的IP地址不对!");

                      e1.printStackTrace();

                 } catch (IOException e1) {

                      count++;

                      JOptionPane.showMessageDialog(jf, "你输入的端口号不对");

                      e1.printStackTrace();

                 }

             }while(s==null);

             if(count<2){

                 String name=JOptionPane.

                 showInputDialog("请输入用户名");

                 userName=name;

                  msg=new Message();

                 msg.setFromName(name);

                 msg.setType("login");

                 msg.setSendTime(new Date());

                 //msg.setToName();

                 try {

                       oos=new ObjectOutputStream(

                                 s.getOutputStream());

                        oos.writeObject(msg);//发送给服务器消息

                       oos.flush();

                   } catch (IOException e1) {

                       // TODO Auto-generated catch block

                       e1.printStackTrace();

                   }

                   //接收服务器端信息

                 new Thread(){

                    

                     JTextField jtf2=new JTextField(10);

                       Message msg2=new Message();

                   public void run(){

                             while(true){

                                try {

                                    ObjectInputStream ois;

                                    ois=new ObjectInputStream(

                                              s.getInputStream());

                                     msg=(Message)ois.readObject();

                                     String type=msg.getType();

                                    

                                     if("login".equals(type)){

                                        List users=msg.getUserList();

                                        dlm.removeAllElements();

                                        for(int i=0;i<users.size();i++){

                                             dlm.addElement(users.get(i));

                                        }

                                        String mes=jta.getText();

                                        if(mes==null&&"".equals(mes)){

                                             jta.setText(msg.getMessage()+"\n");

                                        }else{

                                             jta.append(msg.getMessage()+"\n");

                                        }

                                     }else if("loginOut".equals(type)){

                                          //更新用户列表

                                          //消息框清掉

                                          if(userName.equals(msg.getFromName())){

                                               //如果当前界面是要断开的用户---把用户列表和消息框全部清空

                                               dlm.removeAllElements();

                                               jta.append("您已下线,请从新连接服务器\n");

                                               break;

                                          }else{

                                               //如果当前界面不是要断开的用户---用户列表少一条记录就行,消息框提示XXX下线

                                              List users=msg.getUserList();

                                              dlm.removeAllElements();

                                              for(int i=0;i<users.size();i++){

                                                  dlm.addElement(users.get(i)+"\n");

                                              }

                                              String mes=msg.getMessage();

                                              jta.append(mes+"\n");

                                          }

                                     }else if("send".equals(type)){

                                          String mes=msg.getMessage();

                                          jta.append(mes);

                                     }else if("personal".equals(type)){

                                          //判断是否有人与你私聊

                                          if(userName.equals(msg.getToName())){

                                               toName=msg.getFromName();

                                               System.out.println("被叫"+msg.getFromName());

                                              jf2=new JFrame("与"+msg.getFromName()+"聊天中(被叫)");

                                              JPanel jp=new JPanel();

                                              JButton jb3=new JButton("私聊发送");

                                              JButton jb4=new JButton("私聊关闭");

                                              jb3.addActionListener(new ActionListener(){

                                                   @Override

                                                   public void actionPerformed(

                                                             ActionEvent e) {

                                                        Message msg2=new Message();

                                                        msg2.setMessage("");

                                                        msg2.setMessage(jtf2.getText());

                                                        jtf2.setText("");

                                                        msg2.setSendTime(new Date());

                                                        msg2.setToName(toName);

                                                        msg2.setFromName(userName);

                                                        msg2.setType("personalSend");

                                                        try {

                                                             oos.writeObject(msg2);

                                                             oos.flush();

                                                        } catch (IOException e1) {

                                                             // TODO Auto-generated catch block

                                                             e1.printStackTrace();

                                                        }

                                                   }

                                                 

                                              });

                                              jb4.addActionListener(new ActionListener(){

                                                   @Override

                                                   public void actionPerformed(

                                                             ActionEvent e) {

                                                        jf2.dispose();

                                                        msg2.setType("personalSend");

                                                        msg2.setToName(toName);

                                                        msg2.setFromName(userName);

                                                        msg2.setSendTime(new Date());

                                                        try {

                                                             oos.writeObject(msg2);

                                                             oos.flush();

                                                        } catch (IOException e1) {

                                                             // TODO Auto-generated catch block

                                                             e1.printStackTrace();

                                                        }

                                                   }

                                                 

                                              });

                                              jp.add(jtf2);

                                              jp.add(jb3);

                                              jp.add(jb4);

                                              jf2.add(jsp2,BorderLayout.CENTER);

                                              jf2.add(jp,BorderLayout.SOUTH);

                                              jf2.setSize(500,400);

                                              jf2.setLocation(400,300);

                                              jf2.setVisible(true);

                                              jf2.setResizable(false);

                                              jf2.setDefaultCloseOperation(jf2.DO_NOTHING_ON_CLOSE);

                                              jf2.addWindowListener(new WindowListener(){

                                                   @Override

                                                   public void windowActivated(WindowEvent e) {

                                                        // TODO Auto-generated method stub

                                                       

                                                   }

                                                   @Override

                                                   public void windowClosed(WindowEvent e) {

                                                        // TODO Auto-generated method stub

                                                       

                                                   }

                                                   @Override

                                                   public void windowClosing(WindowEvent e) {

                                                        jf2.dispose();

                                                   }

                                                   @Override

                                                   public void windowDeactivated(WindowEvent e) {

                                                        // TODO Auto-generated method stub

                                                       

                                                   }

                                                   @Override

                                                   public void windowDeiconified(WindowEvent e) {

                                                        // TODO Auto-generated method stub

                                                       

                                                   }

                                                   @Override

                                                   public void windowIconified(WindowEvent e) {

                                                        // TODO Auto-generated method stub

                                                       

                                                    }

                                                   @Override

                                                   public void windowOpened(WindowEvent e) {

                                                        // TODO Auto-generated method stub

                                                       

                                                   }

                                                 

                                              });

                                               /*new Thread(){

                                                   {ObjectInputStream ois1;

                                                   ois1=new ObjectInputStream(

                                                             s.getInputStream());

                                                   }

                                               }.start();*/

                                          }

                                     }else if("personalSend".equals(type)){

                                          System.out.println(userName+"被叫消息");

                                         System.out.println("from"+msg.getFromName()+"to"+msg.getToName());

                                     if(userName.equals(msg.getFromName())||userName.equals(msg.getToName())){

                                               System.out.println(msg.getMessage()+"---");

                                               if(jf2==null){

                                                   jta1.append(msg.getMessage());

                                               }else{

                                                   jta2.append(msg.getMessage());

                                               }

                                              

                                          }

                                     }

                                    

                                 } catch (IOException e) {

                                     // TODO Auto-generated catch block

                                     e.printStackTrace();

                                 } catch (ClassNotFoundException e) {

                                     // TODO Auto-generated catch block

                                     e.printStackTrace();

                                 }

                           }

                      

                    

                   }

                 }.start();

             }

        }else if("断开服务器".equals(com)){

             if(oos!=null){

                  msg=new Message();

                 msg.setType("loginOut");

                 msg.setSendTime(new Date());

                 msg.setFromName(userName);

                 try {

                      oos.writeObject(msg);

                      oos.flush();

                 } catch (IOException e1) {

                      // TODO Auto-generated catch block

                      e1.printStackTrace();

                 }

             }

        }else if("退出".equals(com)){

             if(oos==null){

                 System.exit(0);

             }

              msg=new Message();

             msg.setType("loginOut");

             msg.setSendTime(new Date());

             msg.setFromName(userName);

             try {

                   oos.writeObject(msg);

                   oos.flush();

              } catch (IOException e1) {

                   // TODO Auto-generated catch block

                   e1.printStackTrace();

              }

              System.exit(0);

             System.out.println("你的操作是:"+com);

        }else if("关于小组".equals(com)){

             JOptionPane.showMessageDialog(jf,"欢迎使用qq聊天室软件!");

        }

        //.....else if(){}

    }

    public static void main(String[] args) {

         Client c=new Client();

         //启动程序

         c.startClient();

     }

}

              }

              @Override

              public void mouseExited(MouseEvent e) {

                  

              }

              @Override

              public void mousePressed(MouseEvent e) {

                   // TODO Auto-generated method stub

                  

              }

              @Override

              public void mouseReleased(MouseEvent e) {

                   // TODO Auto-generated method stub

                  

              }

            

        });

        /*userList.addListSelectionListener(new ListSelectionListener(){

              @Override

              public void valueChanged(ListSelectionEvent e) {

                   JOptionPane.showMessageDialog(jf,e.getSource());

                  

              }

            

        });*/

        /*dlm.addListDataListener(new ListDataListener(){

              @Override

              public void contentsChanged(ListDataEvent e) {

                   System.out.println("=====++++"+e.getType());

                   JOptionPane.showMessageDialog(jf,e.getIndex0());

              }

              @Override

              public void intervalAdded(ListDataEvent e) {

                   JOptionPane.showMessageDialog(jf,e.getIndex0());

                  

              }

              @Override

              public void intervalRemoved(ListDataEvent e) {

                   // TODO Auto-generated method stub

                  

              }

            

        });*/

    }

    @Override

    public void actionPerformed(ActionEvent e){

        String com=e.getActionCommand();

        if("发送".equals(com)||"enterKey".equals(com)){

              msg=new Message();

             msg.setFromName(userName);

             msg.setSendTime(new Date());

             msg.setMessage(jtf.getText());

             msg.setType("send");

             try {

                   oos.writeObject(msg);

                   oos.flush();

                  jtf.setText("");

              } catch (IOException e1) {

                   // TODO Auto-generated catch block

                   e1.printStackTrace();

              }

             System.out.println("你的操作是:"+com);

        }else if("连接服务器".equals(com)){

             int count=0;

             do{

                 if(count>=2){

                    JOptionPane.showMessageDialog(

                              jf,"鄙视你");

                    break;

                 }

                 String ip=JOptionPane.

                showInputDialog("请输入服务器端IP:");

                int port=Integer.parseInt(

                         JOptionPane.showInputDialog("请输入服务器端口号:"));

                try {

                      s=new Socket(ip,port);//连接服务器

                 } catch (UnknownHostException e1) {

                      count++;

                      JOptionPane.showMessageDialog(

                               jf,"你输入的IP地址不对!");

                      e1.printStackTrace();

                 } catch (IOException e1) {

                      count++;

                      JOptionPane.showMessageDialog(jf, "你输入的端口号不对");

                      e1.printStackTrace();

                 }

             }while(s==null);

             if(count<2){

                 String name=JOptionPane.

                 showInputDialog("请输入用户名");

                 userName=name;

                  msg=new Message();

                 msg.setFromName(name);

                 msg.setType("login");

                 msg.setSendTime(new Date());

                 //msg.setToName();

                 try {

                       oos=new ObjectOutputStream(

                                 s.getOutputStream());

                       oos.writeObject(msg);//发送给服务器消息

                       oos.flush();

                   } catch (IOException e1) {

                       // TODO Auto-generated catch block

                       e1.printStackTrace();

                   }

                   //接收服务器端信息

                 new Thread(){

                    

                     JTextField jtf2=new JTextField(10);

                       Message msg2=new Message();

                   public void run(){

                             while(true){

                                try {

                                    ObjectInputStream ois;

                                    ois=new ObjectInputStream(

                                              s.getInputStream());

                                     msg=(Message)ois.readObject();

                                     String type=msg.getType();

                                    

                                     if("login".equals(type)){

                                        List users=msg.getUserList();

                                        dlm.removeAllElements();

                                        for(int i=0;i<users.size();i++){

                                             dlm.addElement(users.get(i));

                                        }

                                        String mes=jta.getText();

                                        if(mes==null&&"".equals(mes)){

                                             jta.setText(msg.getMessage()+"\n");

                                        }else{

                                             jta.append(msg.getMessage()+"\n");

                                        }

                                     }else if("loginOut".equals(type)){

                                          //更新用户列表

                                          //消息框清掉

                                          if(userName.equals(msg.getFromName())){

                                               //如果当前界面是要断开的用户---把用户列表和消息框全部清空

                                               dlm.removeAllElements();

                                               jta.append("您已下线,请从新连接服务器\n");

                                               break;

                                          }else{

                                               //如果当前界面不是要断开的用户---用户列表少一条记录就行,消息框提示XXX下线

                                              List users=msg.getUserList();

                                              dlm.removeAllElements();

                                              for(int i=0;i<users.size();i++){

                                                  dlm.addElement(users.get(i)+"\n");

                                              }

                                              String mes=msg.getMessage();

                                              jta.append(mes+"\n");

                                          }

                                     }else if("send".equals(type)){

                                          String mes=msg.getMessage();

                                          jta.append(mes);

                                     }else if("personal".equals(type)){

                                          //判断是否有人与你私聊

                                          if(userName.equals(msg.getToName())){

                                               toName=msg.getFromName();

                                               System.out.println("被叫"+msg.getFromName());

                                              jf2=new JFrame("与"+msg.getFromName()+"聊天中(被叫)");

                                              JPanel jp=new JPanel();

                                              JButton jb3=new JButton("私聊发送");

                                              JButton jb4=new JButton("私聊关闭");

                                              jb3.addActionListener(new ActionListener(){

                                                   @Override

                                                   public void actionPerformed(

                                                             ActionEvent e) {

                                                        Message msg2=new Message();

                                                        msg2.setMessage("");

                                                        msg2.setMessage(jtf2.getText());

                                                        jtf2.setText("");

                                                        msg2.setSendTime(new Date());

                                                        msg2.setToName(toName);

                                                        msg2.setFromName(userName);

                                                        msg2.setType("personalSend");

                                                        try {

                                                             oos.writeObject(msg2);

                                                             oos.flush();

                                                        } catch (IOException e1) {

                                                             // TODO Auto-generated catch block

                                                             e1.printStackTrace();

                                                        }

                                                   }

                                                 

                                              });

                                              jb4.addActionListener(new ActionListener(){

                                                   @Override

                                                   public void actionPerformed(

                                                             ActionEvent e) {

                                                        jf2.dispose();

                                                        msg2.setType("personalSend");

                                                        msg2.setToName(toName);

                                                        msg2.setFromName(userName);

                                                        msg2.setSendTime(new Date());

                                                        try {

                                                             oos.writeObject(msg2);

                                                             oos.flush();

                                                        } catch (IOException e1) {

                                                             // TODO Auto-generated catch block

                                                             e1.printStackTrace();

                                                        }

                                                   }

                                                 

                                              });

                                              jp.add(jtf2);

                                              jp.add(jb3);

                                              jp.add(jb4);

                                              jf2.add(jsp2,BorderLayout.CENTER);

                                              jf2.add(jp,BorderLayout.SOUTH);

                                              jf2.setSize(500,400);

                                              jf2.setLocation(400,300);

                                              jf2.setVisible(true);

                                              jf2.setResizable(false);

                                              jf2.setDefaultCloseOperation(jf2.DO_NOTHING_ON_CLOSE);

                                              jf2.addWindowListener(new WindowListener(){

                                                   @Override

                                                   public void windowActivated(WindowEvent e) {

                                                        // TODO Auto-generated method stub

                                                       

                                                   }

                                                   @Override

                                                   public void windowClosed(WindowEvent e) {

                                                        // TODO Auto-generated method stub

                                                       

                                                   }

                                                   @Override

                                                   public void windowClosing(WindowEvent e) {

                                                        jf2.dispose();

                                                   }

                                                    @Override

                                                   public void windowDeactivated(WindowEvent e) {

                                                        // TODO Auto-generated method stub

                                                       

                                                   }

                                                   @Override

                                                   public void windowDeiconified(WindowEvent e) {

                                                        // TODO Auto-generated method stub

                                                       

                                                   }

                                                   @Override

                                                   public void windowIconified(WindowEvent e) {

                                                        // TODO Auto-generated method stub

                                                       

                                                   }

                                                   @Override

                                                   public void windowOpened(WindowEvent e) {

                                                        // TODO Auto-generated method stub

                                                       

                                                   }

                                                 

                                              });

                                               /*new Thread(){

                                                   {ObjectInputStream ois1;

                                                   ois1=new ObjectInputStream(

                                                             s.getInputStream());

                                                   }

                                               }.start();*/

                                          }

                                     }else if("personalSend".equals(type)){

                                          System.out.println(userName+"被叫消息");

                                         System.out.println("from"+msg.getFromName()+"to"+msg.getToName());

                                     if(userName.equals(msg.getFromName())||userName.equals(msg.getToName())){

                                               System.out.println(msg.getMessage()+"---");

                                               if(jf2==null){

                                                   jta1.append(msg.getMessage());

                                               }else{

                                                   jta2.append(msg.getMessage());

                                               }

                                             

                                          }

                                     }

                                    

                                 } catch (IOException e) {

                                     // TODO Auto-generated catch block

                                     e.printStackTrace();

                                 } catch (ClassNotFoundException e) {

                                     // TODO Auto-generated catch block

                                     e.printStackTrace();

                                 }

                           }

                      

                    

                   }

                 }.start();

             }

        }else if("断开服务器".equals(com)){

             if(oos!=null){

                  msg=new Message();

                 msg.setType("loginOut");

                 msg.setSendTime(new Date());

                 msg.setFromName(userName);

                 try {

                      oos.writeObject(msg);

                      oos.flush();

                 } catch (IOException e1) {

                      // TODO Auto-generated catch block

                      e1.printStackTrace();

                 }

             }

        }else if("退出".equals(com)){

             if(oos==null){

                 System.exit(0);

             }

              msg=new Message();

             msg.setType("loginOut");

             msg.setSendTime(new Date());

             msg.setFromName(userName);

             try {

                   oos.writeObject(msg);

                   oos.flush();

              } catch (IOException e1) {

                   // TODO Auto-generated catch block

                   e1.printStackTrace();

              }

              System.exit(0);

             System.out.println("你的操作是:"+com);

        }else if("关于小组".equals(com)){

             JOptionPane.showMessageDialog(jf,"欢迎使用qq聊天室软件!");

        }

        //.....else if(){}

    }

    public static void main(String[] args) {

         Client c=new Client();

         //启动程序

         c.startClient();

     }

}Message()+"---");

                                               if(jf2==null){

                                                   jta1.append(msg.getMessage());

                                               }else{

                                                   jta2.append(msg.getMessage());

                                               }

                                             

                                          }

                                     }

                                    

                                 } catch (IOException e) {

                                     // TODO Auto-generated catch block

                                     e.printStackTrace();

                                 } catch (ClassNotFoundException e) {

                                     // TODO Auto-generated catch block

                                     e.printStackTrace();

                                }

                           }

                      

                    

                   }

                 }.start();

             }

        }else if("断开服务器".equals(com)){

             if(oos!=null){

                  msg=new Message();

                 msg.setType("loginOut");

                 msg.setSendTime(new Date());

                 msg.setFromName(userName);

                 try {

                      oos.writeObject(msg);

                      oos.flush();

                 } catch (IOException e1) {

                      // TODO Auto-generated catch block

                      e1.printStackTrace();

                 }

             }

        }else if("退出".equals(com)){

             if(oos==null){

                 System.exit(0);

             }

              msg=new Message();

             msg.setType("loginOut");

             msg.setSendTime(new Date());

             msg.setFromName(userName);

             try {

                   oos.writeObject(msg);

                   oos.flush();

              } catch (IOException e1) {

                   // TODO Auto-generated catch block

                   e1.printStackTrace();

              }

              System.exit(0);

             System.out.println("你的操作是:"+com);

        }else if("关于小组".equals(com)){

             JOptionPane.showMessageDialog(jf,"欢迎使用qq聊天室软件!");

        }

        //.....else if(){}

    }

    public static void main(String[] args) {

         Client c=new Client();

         //启动程序

         c.startClient();

     }

}                      }

                           }

                      

                    

                   }

                 }.start();

             }

        }elseif("断开服务器".equals(com)){

             if(oos!=null){

                  msg=new Message();

                 msg.setType("loginOut");

                 msg.setSendTime(new Date());

                 msg.setFromName(userName);

                 try {

                      oos.writeObject(msg);

                      oos.flush();

                 } catch (IOException e1) {

                      // TODO Auto-generated catch block

                      e1.printStackTrace();

                 }

             }

        }elseif("退出".equals(com)){

             if(oos==null){

                 System.exit(0);

             }

              msg=new Message();

             msg.setType("loginOut");

             msg.setSendTime(new Date());

             msg.setFromName(userName);

             try {

                   oos.writeObject(msg);

                   oos.flush();

              } catch (IOException e1) {

                   // TODO Auto-generated catch block

                   e1.printStackTrace();

              }

              System.exit(0);

             System.out.println("你的操作是:"+com);

        }elseif("关于小组".equals(com)){

             JOptionPane.showMessageDialog(jf,"欢迎使用qq聊天室软件!");

        }

        //.....else if(){}

    }

    publicstaticvoid main(String[] args) {

         Client c=new Client();

         //启动程序

         c.startClient();

     }

}

《7》每天上课前有个10分钟演讲。

2.3主要成果

1.学习了Java的基础知识,会编写简单的程序。

2.在组员的合作下作出了QQ聊天吧。

3.经过每天一讲练习了语言组织和演讲能力。

3.总结

 3.1实习体会

    之前听着老师讲.要实习,当时很期待。我每天都在想,我想要做的更大,我应该做的更多,欲望是那么的强烈,就像一个刚出生的小孩想要了解世间一样。

  听说要在达内实习,之前达内外企就在我院进行过讲座,我对之充满了渴望与期望,是的,就要在达内实习了,我的心情反而平静了下来,大概是在内心里经过了很长时间的准备吧,我就要起航了。

  接下来我开始了在达内的学习过程。

  我们的主讲老师,王文刚老师,拿着提前已准备好的课件,很专业,很细心的,思维新颖逻辑严谨罗列着他所要讲的内容,娴熟的敲打他已积累如山的代码,还时不时的讲讲笑话和他的一些事情,当没听懂需再讲一遍时,他还是笑迎喜面的再讲一遍,我们都很喜欢王为刚老师,我也是如此。

  每天都是这样,老师认真的讲着,我认真的听着,一个星期以来,我的脑子里一片空白,我开始苦恼,开始烦躁,想不通自己到底在做什么,这到底能干什么,我开始迷茫,在坐车来回的路上,在食堂,在寝室,在路上,我都在想,事情怎么会是这样。。。。。在夜里想着想着就睡着了。。。。。。。当我再一次的坐在教室里,做着重复的事情,我突然想通了,或许没有更深理解,只是知道这几天所做的真的不是很陌生,也不是很遥远,我的思想也随着它在飞舞。接下来对于老师所讲的项目更是敢兴趣,对于与王为刚老师在一起的时间我更是倍感珍惜,在计算机领域中,是心灵的一种进化,也是心灵的一种提升。

  当老师提出一个项目倒计时游戏时,我会按着老师教给我的思路一步一步的往下想,需求分析,设计造架,编程,测试整个过程,建造一个框架,开始,初级,中级,高级,自定义等等。还做了九九乘法表,图书馆信息录入,猜数字等游戏。最后老师让去我们小组讨论做QQ聊天吧。一说起来容易可做起来难啊,不过对于一个c初学软件的人员来说,对于我还是有一点难度。回忆这几天老师讲过的所有内容,应该是都讲了,不,是讲了,只要拿来应该没问题,这其中还有个小问题,需要去创新,代码是我最大的问题,最后因为这个项目做起来太大,最终终于完成了。

  我很喜欢达内,刚来当时老师亲自接我们实习生,项目经理总是不厌其烦的知道我们的错误。在这里,环境优良,为我们每人准备了一台电脑,天气热,为我们安了空调,严厉之中透漏着温柔,呵斥之中透漏着关怀。

  在这里,我不是一个人而是家庭中的一员,和同学一起上下课,下了课一起打打闹闹的去吃饭,在业余时间还和老师聊聊天,或许这对于别人来说,这是人生中当学生时代最平常不过的事了,可对于我真的很珍贵,我很开心,我现在发现我也不是一个真的很喜欢独处的人,不能彻底的改变,但事实却在改变。

    这次在达内的实习,学到的和感悟到的都很多,对达内外企和所学的这个专业以及趋向有了一定的了解,提前和社会接轨,在今后的工作中,起到了一定决定性的作用,少走了很多的弯路,这次的实习,有这它特定的意义和作用,无论是对我本人还是达内还是学校,都有这它极其深远的意义。

 3.2其它意见

    实习时间短暂,学的东西不能很好的掌握。

学生实习鉴定

兹证明,______   __  ____(大学/学院)             (系/学院)                   专业           同学,从              日至              日在                          公司的       部门        组进行实习。实习期间,该同学主要从事了以下几个方面的工作:

请您对学生实习工作进行评价(生产实习报告内容的真实性,学生在整个实习期间的工作表现,专业知识水平、自学与动手能力、外语水平、合作与独立工作能力、交流表达能力等)

建议实习成绩:            (以优、良、中、及格、不及格五级分计)

指导教师(签字):

评定时间:         年    月    日

更多相关推荐:
大学生科技公司实习总结

经过我一段时间的努力,我在南京找到了一家不错的实习单位——南京盾华交通科技有限公司,于是我开始了我的实习。通过最近一段时间在公司的实习,我对公司的相关情况有了一定的了解,下面我就将自己的实习报告作以陈述。从20…

睿能科技有限公司实习报告

福建睿能科技有限公司实习报告实习时间:20xx年x月18号上午实习目的:我们的实习目的主要是了解企业的主要营运管理模式、企业的机构设置,企业的经营范围、企业的文化,产品的生产过程等。开拓视野,增长见识,拓宽我们…

大学生寒假社会实践报告 电子科技公司实习

一、报告前言今年暑假在合肥索甲电子科技有限公司参加实习这一个月里,我收获很多成长很多。在工作的过程中,我不断发现自己的不足,虚心向公司的同事学习,不断提高自己的工作能力。一个月的实习时光很快就过去了,我过得十分…

赛富科技有限公司实习报告

苏州港大思培科技职业学院题目专业班级姓名指导老师毕业论文赛富科技有限公司实习报告会计5班宋岱郭健20xx年4月29日1苏州港大思培科技职业学院赛富科技有限公司实习报告宋岱摘要20xx年2月20日至20xx年5月...

科技公司实习报告

XX大学毕业实习非师范专业报告姓名XX学号指导教师教师评语

网络科技公司实习报告

摘要本实习报告介绍了本人今年在天鹰网络科技大连有限公司就业实习的概况主要是我对业务流程实务操作的熟悉和一些步入社会后的心得体会以及对实践在专业学习中的重要性的认识一前言虽然我不是计算机专业的学生但凭着对网络的热...

电子科技公司实习报告

电子科技公司实习报告电子科技公司gt实习报告实习目的亲身体验一名普通作业员的生活了解电子元器件的生产加工流程实习时间20xx年1月27日3月4日实习内容岗位gt培训包括职位作业员工作的大致情况对应的相关知识ES...

关于在绍兴市中印数码电子科技有限公司的实习报告

关于在绍兴市中印数码电子科技有限公司的实习报告摘要20xx年12月21日到20xx年3月7日期间笔者在绍兴绍兴市中印数码电子科技有限公司进行毕业实习通过这次实习我了解了很多关于公司的产品以及一些公司的业务上的情...

科技公司实习报告2

XX大学毕业实习非师范专业报告姓名学号指导教师教师评语

江西科技学院实习报告

江西科技学院实习报告实习内容认知性实习课程实习毕业实习实习形式集中分散学生姓名孙喜梅学号20xx165506专业班级12级工商专1班实习单位南昌翊慈实业有限公司实习时间20xx年4月21日到20xx年4月27日...

苏州百得科技有限公司实习报告(河南理工大学版)

毕业实习报告实习单位苏州百得科技有限公司实习时间20xx0115至20xx315学院系电气学院专业电气1003学生姓名XX学号32120xx1139520xx年3月15日SHENANPOLYTECHNICUNI...

杭州电子科技大学生产实习报告

自动化学院学院自动化专业自动化班级学号学生姓名指导教师学期20xx20xx第一学期完成日期20xx12151工程设计训练及生产实习报告总述本次实习一共参观了3家单位分别是杭州汽车发动机厂娃哈哈集团和利时集团3家...

科技公司实习报告(26篇)