1. 首页
  2. 编程语言
  3. Java
  4. Java聊天室源代码

Java聊天室源代码

上传者: 2019-04-04 03:46:23上传 PROJECT文件 381B 热度 63次
import java.awt.*; import java.awt.event.*; import java.net.*; public class Chat { Frame f = new Frame("聊天室"); TextField tfIP = new TextField(15); List lst = new List(6); DatagramSocket ds; /* * 由于DatagramSocket的构造函数声明可能抛出异常,我们的程序需要用try…catch语句 * 进行异常捕获处理,所以不能直接在这里调用DatagramSocket的构造函数对ds进行初始化, * 我们需要将ds的初始化放在 Chat类的构造函数中去完成。 */ public Chat() { try { ds = new DatagramSocket(3000); } catch (Exception ex) { ex.printStackTrace(); } } public static void main(String[] args) { Chat chat = new Chat(); chat.init(); } public void init() { f.setSize(300, 300); f.add(lst); Panel p = new Panel(); p.setLayout(new BorderLayout()); p.add("West", tfIP); TextField tfData = new TextField(20); p.add("East", tfData); f.add("South", p); new Thread(new Runnable() { public void run() { byte buf[] = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf, 1024); while (true) { try { ds.receive(dp); lst.add(new String(buf, 0, dp.getLength()) + ":from" + dp.getAddress().getHostAddress(), 0); } catch (Exception e) { e.printStackTrace(); } } } }).start(); f.setVisible(true); f.setResizable(false);// 限制用户改变窗口的大小 // 增加关闭窗口的事件处理代码 f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { ds.close();// 程序退出时,关闭Socket,释放相关资源 f.setVisible(false); f.dispose(); System.exit(0); } }); // 增加在消息文本框中按下回车键的事件处理代码 tfData.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // 取出文本框中的消息字符串,并将其转换成字节数组 byte[] buf; buf = e.getActionCommand().getBytes(); try { DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName(tfIP.getText()), 3000); ds.send(dp); } catch (Exception ex) { ex.printStackTrace(); } /* * 上面的Exception的引用变量名不能为e,而是改写成了ex,因为e已经在 * actionPerformed方法中作为形式参数变量名被定义过了。 */ ((TextField) e.getSource()).setText(""); } }); } } Chat类的构造函数中去完成。 */ public Chat() { try { ds = new DatagramSocket(3000); } catch (Exception ex) { ex.printStackTrace(); } } public static void main(String[] args) { Chat chat = new Chat(); chat.init(); } public void init() { f.setSize(300, 300); f.add(lst); Panel p = new Panel(); p.setLayout(new BorderLayout()); p.add("West", tfIP); TextField tfData = new TextField(20); p.add("East", tfData); f.add("South", p); new Thread(new Runnable() { public void run() { byte buf[] = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf, 1024); while (true) { try { ds.receive(dp); lst.add(new String(buf, 0, dp.getLength()) + ":from" + dp.getAddress().getHostAddress(), 0); } catch (Exception e) { e.printStackTrace(); } } } }).start(); f.setVisible(true); f.setResizable(false);// 限制用户改变窗口的大小 // 增加关闭窗口的事件处理代码 f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { ds.close();// 程序退出时,关闭Socket,释放相关资源 f.setVisible(false); f.dispose(); System.exit(0); } }); // 增加在消息文本框中按下回车键的事件处理代码 tfData.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // 取出文本框中的消息字符串,并将其转换成字节数组 byte[] buf; buf = e.getActionCommand().getBytes(); try { DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName(tfIP.getText()), 3000); ds.send(dp); } catch (Exception ex) { ex.printStackTrace(); } /* * 上面的Exception的引用变量名不能为e,而是改写成了ex,因为e已经在 * actionPerformed方法中作为形式参数变量名被定义过了。 */ ((TextField) e.getSource()).setText(""); } }); } }
用户评论