最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

Java源代码___聊天室

来源:动视网 责编:小OO 时间:2025-09-29 18:26:06
文档

Java源代码___聊天室

Java聊天室制作人:_____杨永生_____制作时间:2012.9.26目录1本文简介22聊天室截图与说明22.1用Java编译:22.2服务器登录界面22.3服务器窗口22.4客服端登录界面32.5客服端窗口33服务器端63.1MyServer()方法63.2Login()方法103.3Time()方法134客户端144.1MyClient()方法144.2Login()方法184.3Time()方法201本文简介这是一个简单的Java聊天室,仅提供给一些刚学Java的学生做实验,本文也
推荐度:
导读Java聊天室制作人:_____杨永生_____制作时间:2012.9.26目录1本文简介22聊天室截图与说明22.1用Java编译:22.2服务器登录界面22.3服务器窗口22.4客服端登录界面32.5客服端窗口33服务器端63.1MyServer()方法63.2Login()方法103.3Time()方法134客户端144.1MyClient()方法144.2Login()方法184.3Time()方法201本文简介这是一个简单的Java聊天室,仅提供给一些刚学Java的学生做实验,本文也
Java

制作人:_____杨永生_____

制作时间:2012.9.26

目录

1    本文简介    2

2    聊天室截图与说明    2

2.1    用Java编译:    2

2.2    服务器登录界面    2

2.3    服务器窗口    2

2.4    客服端登录界面    3

2.5    客服端窗口    3

3    服务器端    6

3.1    MyServer()方法    6

3.2    Login()方法    10

3.3    Time()方法    13

4    客户端    14

4.1    MyClient()方法    14

4.2    Login()方法    18

4.3    Time()方法    20

1

本文简介

这是一个简单的Java聊天室,仅提供给一些刚学Java的学生做实验,本文也是仅供参考.本文代码都有注释,希望读者能读懂代码,本实验内部还有一些错误,比如只能一条一条的发信息,不能连发,希望能解决本问题的朋友能给我发信息,我的QQ号就是百度号!

2聊天室截图与说明

2.1用Java编译:

本代码有七个类,放在六个java文件中,类名在下方希望读者自己观看,

2.2服务器登录界面

要先运行服务器端的程序

用户名:y

密码:1

用户名密码可以自己设定点击确定可以登录,2秒后到服务端界面

2.3服务器窗口

聊天室的IP为本机的网络虚拟IP,在任何电脑上都能用,端口应设置在1024以后,

2.4客服端登录界面

和服务器端的登录一样

2.5客服端窗口

当登录上后  客服端就显示已经连接了,此时服务器端的窗口如下

由于本程序设计的不是很完整,具体的聊天要先从客服端开始:

在客服端输入一条聊天内容后按确定,在服务器端就可以收到信息,之后客户端不能输入了,要等待服务器端来信息后才能继续输入信息.

想要结束聊天,直接可以关闭窗口,也可以输入’bye’后断开聊天

有兴趣的朋友可以继续完善本实验程序.

3服务器端

3.1MyServer()方法

//服务器端代码

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

import java.text.DateFormat;

import java.util.Date;

import javax.swing.*;

public class MyServer{   //窗体实现类

    protected JLabel  lab10;       //全体变量,做传递的一个组件   

    String s="已经成功连接";  //初始字符串,在两个聊天窗口链接成功时输出,同时作为两个窗口传递字符的一个变量

    

    //构造方法  

    public MyServer(){        

        try{//异常处理try

        JFrame frame=new JFrame("服务器窗口");  //设置窗体

        frame.setLayout(null);    //让布局管理器为空 ,使用绝对定位

        Font fnt=new Font("Serief",Font.PLAIN,40);//字体设置

        Font fnt1=new Font("Serief",Font.PLAIN,20);//字体设置

        

        //我的用户名显示

        JLabel lab1=new JLabel("服务器名:",JLabel.LEFT);   //标签实例化,文本左对齐

        lab1.setBounds(8, 10, 100, 20);  //设置组件位置及大小

        frame.add(lab1);     //添加组件

        JTextField text2=new JTextField(30); //单行文本输入组件

        text2.setBounds(150, 10, 200, 20);//设置组件位置及大小

        text2.setEnabled(false);//文本条不可编辑

        text2.setText("笑笑聊天室");//输入内容

        text2.setFont(fnt1);//设置字体

        frame.add(text2);//添加组件

        

        //服务器IP显示

        JLabel lab2=new JLabel("当前服务器IP:",JLabel.LEFT);  //标签实例化,文本左对齐

        lab2.setBounds(8, 45, 100, 20);//设置组件位置及大小

        frame.add(lab2);//添加组件

        JTextField text3=new JTextField(30);//单行文本输入组件

        text3.setBounds(150, 45, 200, 20);//设置组件位置及大小

        text3.setEnabled(false);   //文本不可编辑

        text3.setText("127.0.0.1");//输入内容

        text3.setFont(fnt1);//设置字体

        frame.add(text3);  //添加组件

        

        //服务器端口显示

        JLabel lab3=new JLabel("当前服务器端口:",JLabel.LEFT);  //标签实例化,文本左对齐

        lab3.setBounds(8, 80, 100, 20);//设置组件位置及大小

        frame.add(lab3);//添加组件

        JTextField text4=new JTextField(30);//单行文本输入组件

        text4.setBounds(150, 80, 200, 20);//设置组件位置及大小

        text4.setEnabled(false);//文本不可编辑

        text4.setText("8888");//输入内容

        text4.setFont(fnt1);//设置字体

        frame.add(text4);//添加组件

        

        //聊天记录显示

        JLabel lab4=new JLabel("聊天记录如下:",JLabel.LEFT);  //标签实例化,文本左对齐

        lab4.setBounds(8, 115, 100, 20);//设置组件位置及大小

        frame.add(lab4);//添加组件

        final JTextArea text1=new JTextArea();//多行文本输入组件

        text1.setEnabled(false);//文本不可编辑

        text1.setLineWrap(true);//自动换行 

        JScrollPane scr=new JScrollPane(text1,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);  //设置滚动条,水平和垂直滚动条始终显示

        scr.setBounds(8, 150, 450, 350);//设置组件位置及大小

        frame.add(scr);//添加组件

        

        //聊天输入窗口及确定

        JLabel lab5=new JLabel("请输入聊天内容:",JLabel.LEFT);  //标签实例化,文本左对齐

        lab5.setBounds(8, 500, 100, 20);//设置组件位置及大小

        frame.add(lab5);//添加组件

        final JTextArea text5=new JTextArea();//多行文本输入组件

        text5.setLineWrap(true);//自动换行

        JScrollPane scr2=new JScrollPane(text5,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);//设置滚动条,水平和垂直滚动条始终显示

        scr2.setBounds(150, 500, 300, 50);//设置组件位置及大小

        frame.add(scr2);//添加组件

        final JButton but=new JButton("确定");//设置确定按钮

        but.setFont(fnt);//添加字体设置    

        but.setBounds(480, 500, 200, 50);//设置组件位置及大小

        but.addActionListener(new ActionListener(){ //采用内部匿名类

            public void actionPerformed(ActionEvent e){

                if(e.getSource()==but){ //判断触发器源是否是提交按钮

                    text1.append("笑笑: "+lab10.getText()+"\\n  ");//在聊天记录上添加文本

                    text1.append(text5.getText()+"\\n");   //将输入的聊天内容输出在聊天记录上        

                    s=text5.getText();                     //得到聊天内容

                    text5.setText("");                     // 将聊天窗口内容设置为空 

                }

            }

        }) ;

        frame.add(but);//添加组件    

        

        //当前时间显示

        JLabel lab7=new JLabel("时间显示:",JLabel.LEFT);//标签实例化,文本左对齐

        lab7.setBounds(450, 20, 100, 20);//设置组件位置及大小

        frame.add(lab7);//添加组件                

        DateFormat df=DateFormat.getDateTimeInstance();//取得系统时间

        String df2= df.format(new Date());                //将时间转换成字符串    

        JLabel lab8=new JLabel(df2,JLabel.LEFT);//标签实例化,文本左对齐

        lab8.setBounds(520, 20, 130, 20);//设置组件位置及大小

        frame.add(lab8);//添加组件

        lab10=lab8;     //传递时间显示,以便能在聊天记录上显示记录时间

        new Time(lab8);  //使时间动态显示    

        

        //用户列表显示    

        JLabel lab6=new JLabel("用户列表:",JLabel.LEFT);//标签实例化,文本左对齐

        lab6.setBounds(500, 40, 100, 20);//设置组件位置及大小

        frame.add(lab6);//添加组件

        JTextArea text6=new JTextArea();//标签实例化,文本左对齐

        text6.setEnabled(false);//文本不可编辑

        text6.setLineWrap(true);//自动换行

        JScrollPane scr3=new JScrollPane(text6,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);//设置滚动条,水平和垂直滚动条始终显示

        scr3.setBounds(460, 70, 220, 420);//设置组件位置及大小

        frame.add(scr3);//添加组件        

        

        //窗口的属性

        frame.setSize(700,600);//窗口大小

        frame.getContentPane().setBackground(Color.pink);//窗口的背景颜色

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口时关闭程序

        frame.setLocation(100,50);//在电脑桌面上出现的位置

        frame.setVisible(true);//显示窗口

        

        //连个窗口连接

        //建立Server Socket并等待连接请求

        ServerSocket server =new ServerSocket(88);

        Socket socket=server.accept();

        //连接建立,通过Socket获取连接上的输入/输出流

        BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));

        final  PrintWriter out =new PrintWriter(socket.getOutputStream());

        //先读取Client发送的数据,然后从标准输入读取数据发送给Client当接收到bye时关闭连接

        String s1="",s2="";  //标志字符串,作为传递字符串使用

        while(!(s1=in.readLine()).equals("bye")){  //得到其他窗口传递的字符串,并判断是否结束            

               text6.setText("可可在线");            //当连接成功是在用户列表中 输出用户名字

               if(!s1.equals("")){                      //如果传递的字符串不为空                                             

                      text1.append("可可: "+lab10.getText()+"\\n  ");//在聊天记录上添加文本

                      text1.append(s1+"\\n");            //将输入的聊天内容输出在聊天记录上                  

               }                   

               s2=s;//将在聊天窗口中得到的字符串传递给输出字符串              

               for(;s2.equals("")||s2.equals(null);s2=s){//当传递的字符串为空时等待用户输入聊天内容                   

                       }

               s="";//将在聊天窗口中得到的字符串设为空                                         

               if(!s2.equals("")&&!s2.equals(null)){// s2不为空时做                                         

                      out.println(s2);            //向其他窗口输出字符串                                                                            

                }                                                                                      

                 out.flush();//输出聊天内容                  

         }

        

         //关闭连接

         in.close();

         out.close();

         socket.close();

         server.close();

         }catch(Exception e){

         }               

    }

    

    //main函数

    public static void main(String args[]){

        new Login();    //登录实现                            

    }

}

3.2Login()方法

import java.awt.event.WindowAdapter ;

import java.awt.event.ActionListener ;

import java.awt.event.WindowEvent ;

import java.awt.event.ActionEvent ;

import java.awt.Color ;

import java.awt.Font ;

import javax.swing.JFrame ;

import javax.swing.JButton ;

import javax.swing.JLabel ;

import javax.swing.JTextField ;

import javax.swing.JPasswordField ;

//用户名和密码设置

class LoginCheck{//设置登录密码

    private String name ;//用户名

    private String password ;//密码

    

    //构造方法

    public LoginCheck(String name,String password){

        this.name = name ;//传递用户名

        this.password = password ;//传递密码

    }

    

    //验证用户名和密码

    public boolean validate(){//验证方法

        if("y".equals(name)&&"1".equals(password)){  //判断用户名和密码是否正确

            return true ;//返回true

        }else{

            return false ;//返回false

        }

    }

};

//登录窗口

class Login{//登录类名

    boolean f=false;//按登录时设置的一个标志    

    private JFrame frame = new JFrame("Welcome To MLDN") ; //设置窗体

    private JButton submit = new JButton("登陆");//设置登录按钮

    private JButton reset = new JButton("重置");//设置重置按钮

    private JLabel nameLab = new JLabel("服务器:") ;//标签实例化

    private JLabel passLab = new JLabel("密   码:") ;//标签实例化

    private JLabel infoLab = new JLabel("服务器登陆系统") ;//标签实例化

    private JTextField nameText = new JTextField(10) ;//单行文本输入条

    private JPasswordField passText = new JPasswordField() ;//单行密码文本输入条    

    public Login(){//登录窗口构造方法

        Font fnt = new Font("Serief",Font.ITALIC + Font.BOLD,12) ;//设置字体

        infoLab.setFont(fnt) ;    // 设置标签的显示文字

        submit.addActionListener(new ActionListener(){  //采用内部匿名类

        public void actionPerformed(ActionEvent e){

                if(e.getSource()==submit){   //判断触发器源是否是提交按钮

                    String tname = nameText.getText() ; //得到输入的用户名

                    String tpass = new String(passText.getPassword()) ;//得到输入的密码,此时通过getPassageword()方法返回的是字符数组

                    LoginCheck log = new LoginCheck(tname,tpass) ;//实例化LoginCheck对象,传入输入的用户名和密码

                    if(log.validate()){//对用户名和密码进行验证

                        try{            //线程异常处理try

                            Thread.sleep(2000);  //2秒后打开聊天窗口

                            f=true;                 //登录成功后的表示项为true

                            frame.dispose();    //关闭本窗口

                        }catch(Exception ee){//异常获取            

                        }

                    }else{

                        infoLab.setText("登陆失败,错误的用户名或密码!") ;//登录失败

                    }

                }

            }

        }) ;

        reset.addActionListener(new ActionListener(){ //采用内部匿名类

            public void actionPerformed(ActionEvent e){

                if(e.getSource()==reset){ //判断触发器源是否是提交按钮

                    nameText.setText("") ;//设置文本框中的内容

                    passText.setText("") ;//设置文本框中的内容

                    infoLab.setText("服务器登陆系统") ;//恢复标签显示

                }

            }

        }) ;    

        frame.addWindowListener(new WindowAdapter(){//加入窗口监听

            public void windowClosing(WindowEvent e){

            }

        }) ;    // 加入事件

        frame.setLayout(null) ;//使用绝对定位

        nameLab.setBounds(5,5,60,20) ;//设置标签的位置及大小

        passLab.setBounds(5,30,60,20) ;//设置标签的位置及大小

        infoLab.setBounds(5,65,220,30) ;//设置标签的位置及大小

        nameText.setBounds(65,5,100,20) ;//设置文本域的位置及大小

        passText.setBounds(65,30,100,20) ;//设置密码域的位置及大小

        submit.setBounds(165,5,60,20) ;//设置按钮的位置及大小

        reset.setBounds(165,30,60,20) ;//设置按钮的位置及大小

        frame.add(nameLab) ;//向窗体加入标签

        frame.add(passLab) ;//向窗体加入标签

        frame.add(infoLab) ;//向窗体加入标签

        frame.add(nameText) ;//向窗体加入文本框

        frame.add(passText) ;//向窗体加入密码框

        frame.add(submit) ;//向窗体加入按钮

        frame.add(reset) ;//向窗体加入按钮

        frame.setSize(280,130) ;//设置窗体大小

        frame.getContentPane().setBackground(Color.green) ;//设置窗体的背景颜色

        frame.setLocation(300,200) ;//设置窗体在电脑桌面上的位置

        frame.setVisible(true) ;//显示窗口

        while(f==false){  //当登录失败时,一直循环运行,            

        }

        new MyServer();//显示窗体页面

    }    

}

3.3Time()方法

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.text.SimpleDateFormat;

import java.util.Date;

import javax.swing.JLabel;

import javax.swing.Timer;

//时间类

public class Time {

    public Time(JLabel time){ //构造方法

        this.setTimer(time);  //设置时间

    }

    public void setTimer(JLabel time){   //设置时间方法

        final JLabel varTime = time;     //传递组件

        Timer timeAction = new Timer(1000, new ActionListener() {    //时间监听      

            public void actionPerformed(ActionEvent e) {       

                long timemillis = System.currentTimeMillis();     //得到系统时间      

                SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  //转换日期显示格式    

                varTime.setText(df.format(new Date(timemillis)));   //输出得到的时间

            }      

        });            

        timeAction.start();        //开启线程  

    }   

}

4客户端

4.1MyClient()方法

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.Socket;

import java.text.DateFormat;

import java.util.Date;

import javax.swing.*;

public class MyClient{

    protected JLabel lab10;//全体变量,做传递的一个组件   

    String s="连接成功";//初始字符串,在两个聊天窗口链接成功时输出,同时作为两个窗口传递字符的一个变量

    

    //构造方法  

    public MyClient(){        

        JFrame frame=new JFrame("用户端窗口");  //设置窗体

        frame.setLayout(null);    //让布局管理器为空 ,使用绝对定位

        Font fnt=new Font("Serief",Font.PLAIN,40);//字体设置

        Font fnt1=new Font("Serief",Font.PLAIN,20);//字体设置

        

        //我的用户名显示

        JLabel lab1=new JLabel("服务器名:",JLabel.LEFT);   //标签实例化,文本左对齐

        lab1.setBounds(8, 10, 100, 20);  //设置组件位置及大小

        frame.add(lab1);     //添加组件

        JTextField text2=new JTextField(30); //单行文本输入组件

        text2.setBounds(150, 10, 200, 20);//设置组件位置及大小

        text2.setEnabled(false);//文本条不可编辑

        text2.setText("可可聊天室");//输入内容

        text2.setFont(fnt1);//设置字体

        frame.add(text2);//添加组件

        

        //服务器IP显示

        JLabel lab2=new JLabel("当前服务器IP:",JLabel.LEFT);  //标签实例化,文本左对齐

        lab2.setBounds(8, 45, 100, 20);//设置组件位置及大小

        frame.add(lab2);//添加组件

        JTextField text3=new JTextField(30);//单行文本输入组件

        text3.setBounds(150, 45, 200, 20);//设置组件位置及大小

        text3.setEnabled(false);   //文本不可编辑

        text3.setText("127.0.0.1");//输入内容

        text3.setFont(fnt1);//设置字体

        frame.add(text3);  //添加组件

        

        //服务器端口显示

        JLabel lab3=new JLabel("当前服务器端口:",JLabel.LEFT);  //标签实例化,文本左对齐

        lab3.setBounds(8, 80, 100, 20);//设置组件位置及大小

        frame.add(lab3);//添加组件

        JTextField text4=new JTextField(30);//单行文本输入组件

        text4.setBounds(150, 80, 200, 20);//设置组件位置及大小

        text4.setEnabled(false);//文本不可编辑

        text4.setText("8888");//输入内容

        text4.setFont(fnt1);//设置字体

        frame.add(text4);//添加组件

        

        //聊天记录显示

        JLabel lab4=new JLabel("聊天记录如下:",JLabel.LEFT);  //标签实例化,文本左对齐

        lab4.setBounds(8, 115, 100, 20);//设置组件位置及大小

        frame.add(lab4);//添加组件

        final JTextArea text1=new JTextArea();//多行文本输入组件

        text1.setEnabled(false);//文本不可编辑

        text1.setLineWrap(true);//自动换行        

        JScrollPane scr=new JScrollPane(text1,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);  //设置滚动条,水平和垂直滚动条始终显示

        scr.setBounds(8, 150, 450, 350);//设置组件位置及大小

        frame.add(scr);//添加组件

        

        //聊天输入窗口及确定

        JLabel lab5=new JLabel("请输入聊天内容:",JLabel.LEFT);  //标签实例化,文本左对齐

        lab5.setBounds(8, 500, 100, 20);//设置组件位置及大小

        frame.add(lab5);//添加组件

        final JTextArea text5=new JTextArea();//多行文本输入组件

        text5.setLineWrap(true);//自动换行

        JScrollPane scr2=new JScrollPane(text5,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);//设置滚动条,水平和垂直滚动条始终显示

        scr2.setBounds(150, 500, 300, 50);//设置组件位置及大小

        frame.add(scr2);//添加组件

        final JButton but=new JButton("确定");//设置确定按钮

        but.setFont(fnt);//添加字体设置    

        but.setBounds(480, 500, 200, 50);//设置组件位置及大小

        but.addActionListener(new ActionListener(){ //采用内部匿名类

            public void actionPerformed(ActionEvent e){

                if(e.getSource()==but){ //判断触发器源是否是提交按钮    

                    text1.append("可可: "+lab10.getText()+"\\n  ");//在聊天记录上添加文本

                    text1.append(text5.getText()+"\\n");//将输入的聊天内容输出在聊天记录上   

                      s=text5.getText();      //得到聊天内容

                      text5.setText("");     // 将聊天窗口内容设置为空 

                }

            }

        }) ;

        frame.add(but);//添加组件    

        //当前时间显示

        JLabel lab7=new JLabel("时间显示:",JLabel.LEFT);//标签实例化,文本左对齐

        lab7.setBounds(450, 20, 100, 20);//设置组件位置及大小

        frame.add(lab7);//添加组件                

        DateFormat df=DateFormat.getDateTimeInstance();//取得系统时间

        String df2= df.format(new Date());                //将时间转换成字符串    

        JLabel lab8=new JLabel(df2,JLabel.LEFT);//标签实例化,文本左对齐

        lab8.setBounds(520, 20, 130, 20);//设置组件位置及大小

        frame.add(lab8);//添加组件

        lab10=lab8; //传递时间显示,以便能在聊天记录上显示记录时间

        new Time(lab8);  //使时间动态显示    

        

        //用户列表显示    

        JLabel lab6=new JLabel("用户列表:",JLabel.LEFT);//标签实例化,文本左对齐

        lab6.setBounds(500, 40, 100, 20);//设置组件位置及大小

        frame.add(lab6);//添加组件

        JTextArea text6=new JTextArea();//标签实例化,文本左对齐

        text6.setEnabled(false);//文本不可编辑        

        text6.setLineWrap(true);//自动换行

        JScrollPane scr3=new JScrollPane(text6,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);//设置滚动条,水平和垂直滚动条始终显示

        scr3.setBounds(460, 70, 220, 420);//设置组件位置及大小

        frame.add(scr3);//添加组件                

        //窗口的属性

        frame.setSize(700,600);//窗口大小

        frame.getContentPane().setBackground(Color.pink);//窗口的背景颜色

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口时关闭程序

        frame.setLocation(10,10);//在电脑桌面上出现的位置

        frame.setVisible(true);//显示窗口    

        try{  //try异常处理

            Socket socket=new Socket("127.0.0.1",88);    //发出连接请求

            //建立连接,通过Socket获得连接上的输入/输出流

            PrintWriter out =new PrintWriter(socket.getOutputStream());

            BufferedReader in = new BufferedReader( new InputStreamReader(socket.getInputStream()));

            //从标准输入中读取一行,发送Server端,当用户输入bye时结束连接

            do{  

                    while(s.equals("")||s.equals(null)){//当传递的字符串为空时等待用户输入聊天内容                              

                    }                  

                      if(!s.equals("")&&!s.equals(null)){//s不为空时做                      

                    out.println(s);     //向其他窗口输出字符串                       

                    s="";             //将在聊天窗口中得到的字符串设为空                                                

                      }                                                                                                                                                                   

                    out.flush();//输出聊天内容               

                    if(!s.equals("bye")){ //判断聊天是否结束                           

                         String s3;  //得到其他窗口传来的字符串

                         while( (s3=in.readLine()).equals("\\n")&&s3.equals(null)&&s3.equals("")){//判断s3是否为空   ,为空时等待            

                         }

                         text6.setText("笑笑在线"); //当连接成功是在用户列表中 输出用户名字                                       

                         if(!s3.equals("\\n")&&!s3.equals(null)&&!s3.equals("")){//s3不为空时做

                            text1.append("笑笑: "+lab10.getText()+"\\n  ");//在聊天记录上添加文本

                            text1.append(s3+"\\n");      //将输入的聊天内容输出在聊天记录上    

                         }

                    }

                    

              }while(!s.equals("bye"));//判断是否结束

              //关闭连接

              out.close();

              in.close();

              socket.close();

            }catch(Exception e){          

            }                         

    }

    

    //main函数

    public static void main(String args[]){

        new Login();//登录实现    

    }

}

4.2Login()方法

import java.awt.event.WindowAdapter ;

import java.awt.event.ActionListener ;

import java.awt.event.WindowEvent ;

import java.awt.event.ActionEvent ;

import java.awt.Color ;

import java.awt.Font ;

import javax.swing.JFrame ;

import javax.swing.JButton ;

import javax.swing.JLabel ;

import javax.swing.JTextField ;

import javax.swing.JPasswordField ;

//用户名和密码设置

class LoginCheck{//设置登录密码

    private String name ;//用户名

    private String password ;//密码

    //构造方法

    public LoginCheck(String name,String password){

        this.name = name ;//传递用户名

        this.password = password ;//传递密码

    }

    //验证用户名和密码

    public boolean validate(){//验证方法

        if("y".equals(name)&&"1".equals(password)){  //判断用户名和密码是否正确

            return true ;//返回true

        }else{

            return false ;//返回false

        }

    }

};

//登录窗口

class Login{//登录类名

    boolean f=false;//按登录时设置的一个标志    

    private JFrame frame = new JFrame("Welcome To MLDN") ; //设置窗体

    private JButton submit = new JButton("登陆");//设置登录按钮

    private JButton reset = new JButton("重置");//设置重置按钮

    private JLabel nameLab = new JLabel("用户名:") ;//标签实例化

    private JLabel passLab = new JLabel("密   码:") ;//标签实例化

    private JLabel infoLab = new JLabel("用户登陆系统") ;//标签实例化

    private JTextField nameText = new JTextField(10) ;//单行文本输入条

    private JPasswordField passText = new JPasswordField() ;//单行密码文本输入条

    public Login(){//登录窗口构造方法

        Font fnt = new Font("Serief",Font.ITALIC + Font.BOLD,12) ;//设置字体

        infoLab.setFont(fnt) ;    // 设置标签的显示文字

        submit.addActionListener(new ActionListener(){  //采用内部匿名类

        public void actionPerformed(ActionEvent e){

                if(e.getSource()==submit){   //判断触发器源是否是提交按钮

                    String tname = nameText.getText() ; //得到输入的用户名

                    String tpass = new String(passText.getPassword()) ;//得到输入的密码,此时通过getPassageword()方法返回的是字符数组

                    LoginCheck log = new LoginCheck(tname,tpass) ;//实例化LoginCheck对象,传入输入的用户名和密码

                    if(log.validate()){//对用户名和密码进行验证

                        try{

                            Thread.sleep(2000);  //2秒后打开聊天窗口

                            f=true;       //登录成功后的表示项为true

                            frame.dispose();    //关闭本窗口

                        }catch(Exception ee){//异常获取            

                        }

                    }else{

                        infoLab.setText("登陆失败,错误的用户名或密码!") ;//登录失败

                    }

                }

            }

        }) ;

        reset.addActionListener(new ActionListener(){ //采用内部匿名类

            public void actionPerformed(ActionEvent e){

                if(e.getSource()==reset){ //判断触发器源是否是提交按钮

                    nameText.setText("") ;//设置文本框中的内容

                    passText.setText("") ;//设置文本框中的内容

                    infoLab.setText("用户登陆系统") ;//恢复标签显示

                }

            }

        }) ;

        frame.addWindowListener(new WindowAdapter(){//加入窗口监听

            public void windowClosing(WindowEvent e){

            }

        }) ;    // 加入事件

        frame.setLayout(null) ;//使用绝对定位

        nameLab.setBounds(5,5,60,20) ;//设置标签的位置及大小

        passLab.setBounds(5,30,60,20) ;//设置标签的位置及大小

        infoLab.setBounds(5,65,220,30) ;//设置标签的位置及大小

        nameText.setBounds(65,5,100,20) ;//设置文本域的位置及大小

        passText.setBounds(65,30,100,20) ;//设置密码域的位置及大小

        submit.setBounds(165,5,60,20) ;//设置按钮的位置及大小

        reset.setBounds(165,30,60,20) ;//设置按钮的位置及大小

        frame.add(nameLab) ;//向窗体加入标签

        frame.add(passLab) ;//向窗体加入标签

        frame.add(infoLab) ;//向窗体加入标签

        frame.add(nameText) ;//向窗体加入文本框

        frame.add(passText) ;//向窗体加入密码框

        frame.add(submit) ;//向窗体加入按钮

        frame.add(reset) ;//向窗体加入按钮

        frame.setSize(280,130) ;//设置窗体大小

        frame.getContentPane().setBackground(Color.green) ;//设置窗体的背景颜色

        frame.setLocation(300,200) ;//设置窗体在电脑桌面上的位置

        frame.setVisible(true) ;//显示窗口

        while(f==false){//当登录失败时,一直循环运行,           

        }

        new MyClient();//显示窗体页面

    }    

};

4.3Time()方法

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.text.SimpleDateFormat;

import java.util.Date;

import javax.swing.JLabel;

import javax.swing.Timer;

//时间类

public class Time {

    public Time(JLabel time){//构造方法

        this.setTimer(time);//设置时间

    }

    public void setTimer(JLabel time){    //设置时间方法

        final JLabel varTime = time;      //传递组件

        Timer timeAction = new Timer(1000, new ActionListener() {   //时间监听              

            public void actionPerformed(ActionEvent e) {       

                long timemillis = System.currentTimeMillis();    //得到系统时间                     

                SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");   //转换日期显示格式   

                varTime.setText(df.format(new Date(timemillis)));   //输出得到的时间

            }      

        });            

        timeAction.start();         //开启线程   

    }   

}

文档

Java源代码___聊天室

Java聊天室制作人:_____杨永生_____制作时间:2012.9.26目录1本文简介22聊天室截图与说明22.1用Java编译:22.2服务器登录界面22.3服务器窗口22.4客服端登录界面32.5客服端窗口33服务器端63.1MyServer()方法63.2Login()方法103.3Time()方法134客户端144.1MyClient()方法144.2Login()方法184.3Time()方法201本文简介这是一个简单的Java聊天室,仅提供给一些刚学Java的学生做实验,本文也
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top