1、Java源代码聊天室汇总Java聊天室目录1 本文简介 22 聊天室截图与说明 22.1 用Java编译: 22.2 服务器登录界面 22.3 服务器窗口 22.4 客服端登录界面 32.5 客服端窗口 33 服务器端 33.1 MyServer(方法 33.2 Login(方法 33.3 Time(方法 34 客户端 34.1 MyClient(方法 34.2 Login(方法 34.3 Time(方法 31 本文简介这是一个简单的Java聊天室,仅提供给一些刚学Java的学生做实验,本文也是仅供参考.本文代码都有注释,希望读者能读懂代码,本实验内部还有一些错误,比如只能一条一条的发信息,不
2、能连发,希望能解决本问题的朋友能给我发信息,我的QQ号就是XX号!2 聊天室截图与说明2.1 用Java编译:本代码有七个类,放在六个java文件中,类名在下方希望读者自己观看,2.2 服务器登录界面要先运行服务器端的程序用户名:y密码:1用户名密码可以自己设定点击确定可以登录,2秒后到服务端界面2.3 服务器窗口聊天室的IP为本机的网络虚拟IP,在任何电脑上都能用,端口应设置在1024以后,2.4 客服端登录界面和服务器端的登录一样2.5 客服端窗口当登录上后 客服端就显示已经连接了,此时服务器端的窗口如下由于本程序设计的不是很完整,具体的聊天要先从客服端开始:在客服端输入一条聊天内容后按确
3、定,在服务器端就可以收到信息,之后客户端不能输入了,要等待服务器端来信息后才能继续输入信息.想要结束聊天,直接可以关闭窗口,也可以输入bye后断开聊天有兴趣的朋友可以继续完善本实验程序.3 服务器端3.1 MyServer(方法/服务器端代码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;
4、import .ServerSocket;import .Socket;import java.text.DateFormat;import java.util.Date;import javax.swing.*;public class MyServer /窗体实现类protected JLabel lab10; /全体变量,做传递的一个组件 String s=已经成功连接; /初始字符串,在两个聊天窗口链接成功时输出,同时作为两个窗口传递字符的一个变量/构造方法 public MyServer( try/异常处理tryJFrame frame=new JFrame(服务器窗口; /设置窗体
5、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; /单行文本输入组件tex
6、t2.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
7、;/单行文本输入组件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
8、=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
9、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;/添加组件/聊天输入
10、窗口及确定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_SCR
11、OLLBAR_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 eif(e.ge
12、tSource(=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;/设置组件位置及大
13、小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; /使时间动态显示 /用户列表显示 J
14、Label 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,JScrollP
15、ane.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;/在电脑桌面上出现的
16、位置frame.setVisible(true;/显示窗口/连个窗口连接/建立Server Socket并等待连接请求ServerSocket server =new ServerSocket(8889;Socket socket=server.accept(;/连接建立,通过Socket获取连接上的输入/输出流BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream(;final PrintWriter out =new PrintWriter(socket.getOutputStream
17、(;/先读取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;/将在聊
18、天窗口中得到的字符串传递给输出字符串 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 argsne
19、w Login(; /登录实现 4.2 Login(方法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 ;
20、import javax.swing.JTextField ;import javax.swing.JPasswordField ;/用户名和密码设置class LoginCheck/设置登录密码private String name ;/用户名private String password ;/密码/构造方法public LoginCheck(String name,String passwordthis.name = name ;/传递用户名this.password = password ;/传递密码/验证用户名和密码public boolean validate(/验证方法if(y.e
21、quals(name&1.equals(password /判断用户名和密码是否正确return true ;/返回trueelsereturn 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 JLa
22、bel 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
23、(Serief,Font.ITALIC + Font.BOLD,12 ;/设置字体infoLab.setFont(fnt ; / 设置标签的显示文字submit.addActionListener(new ActionListener( /采用内部匿名类public void actionPerformed(ActionEvent eif(e.getSource(=submit /判断触发器源是否是提交按钮String tname = nameText.getText( ; /得到输入的用户名String tpass = new String(passText.getPassword( ;/得
24、到输入的密码,此时通过getPassageword(方法返回的是字符数组LoginCheck log = new LoginCheck(tname,tpass ;/实例化LoginCheck对象,传入输入的用户名和密码if(log.validate(/对用户名和密码进行验证try /线程异常处理tryThread.sleep(2000; /2秒后打开聊天窗口f=true; /登录成功后的表示项为trueframe.dispose(; /关闭本窗口catch(Exception ee/异常获取 elseinfoLab.setText(登陆失败,错误的用户名或密码! ;/登录失败 ;reset.a
25、ddActionListener(new ActionListener( /采用内部匿名类public void actionPerformed(ActionEvent eif(e.getSource(=reset /判断触发器源是否是提交按钮nameText.setText( ;/设置文本框中的内容passText.setText( ;/设置文本框中的内容infoLab.setText(服务器登陆系统 ;/恢复标签显示 ; frame.addWindowListener(new WindowAdapter(/加入窗口监听public void windowClosing(WindowEven
26、t 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.
27、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.gre
28、en ;/设置窗体的背景颜色frame.setLocation(300,200 ;/设置窗体在电脑桌面上的位置frame.setVisible(true ;/显示窗口while(f=false /当登录失败时,一直循环运行, new MyServer(;/显示窗体页面 4.3 Time(方法import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.text.SimpleDateFormat;import java.util.Date;import javax.swing.JLabel;i
29、mport 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(; /开启线程 5 客户端5.1 MyClient(方法import java.awt.*;import java.awt.event.ActionE
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2