javaGUI实现多人聊天功能

下面是Java GUI实现多人聊天的完整攻略:

1. 确定实现方式

Java GUI实现多人聊天功能,可以采用Socket连接和Java Swing界面实现,也可以使用第三方库。这里我们介绍Socket连接和Java Swing界面实现的方式。

2. 创建Server端

首先,创建Server端代码,该部分主要用于监听客户端的连接请求,并进行相应的处理。其中,Server使用TCP协议连接,等待客户端连接。以下是Server端的示例代码:

import java.net.*;
import java.io.*;

public class Server {
    private Socket socket;
    private ServerSocket serverSocket;
    private DataInputStream in;
    private DataOutputStream out;

    public Server() {
        try {
            serverSocket = new ServerSocket(8000);
            socket = serverSocket.accept();
            System.out.println("客户端连接成功!");

            in = new DataInputStream(socket.getInputStream());
            out = new DataOutputStream(socket.getOutputStream());

            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

            String message = "";
            String receiveMessage = "";

            //循环接收消息并回复客户端
            while(!message.equals("end")){
                receiveMessage = in.readUTF();
                System.out.println("客户端:" + receiveMessage);
                message = br.readLine();
                out.writeUTF(message);
                out.flush();
            }

            in.close();
            out.close();
            socket.close();
            serverSocket.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        new Server();
    }
}

3. 创建Client端

接下来,创建Client端代码,该部分主要用于连接到Server端并进行聊天操作。以下是Client端的示例代码:

import java.net.*;
import java.io.*;

public class Client {
    private Socket socket;
    private DataInputStream in;
    private DataOutputStream out;

    public Client() {
        try {
            socket = new Socket("localhost", 8000);
            System.out.println("连接服务器成功!");

            in = new DataInputStream(socket.getInputStream());
            out = new DataOutputStream(socket.getOutputStream());

            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

            String message = "";
            String receiveMessage = "";

            //循环发送消息并接收服务器回复
            while(!message.equals("end")){
                message = br.readLine();
                out.writeUTF(message);
                out.flush();

                receiveMessage = in.readUTF();
                System.out.println("Server:" + receiveMessage);
            }

            in.close();
            out.close();
            socket.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        new Client();
    }
}

4. 创建GUI界面

最后,我们创建一个GUI界面,用于实现多人聊天的界面操作。以下是实现多人聊天的示例代码:

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class ChatClient {

    private JFrame frame;
    private JTextField textField;
    private JTextArea textArea;
    private Socket socket;
    private DataInputStream in;
    private DataOutputStream out;

    public ChatClient() {
        initialize();
        connect();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel();
        frame.getContentPane().add(panel, BorderLayout.SOUTH);

        textField = new JTextField();
        panel.add(textField);
        textField.setColumns(30);

        JButton btnNewButton = new JButton("发送");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String message = textField.getText();
                try {
                    out.writeUTF(message);
                    out.flush();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }

                textField.setText("");
            }
        });
        panel.add(btnNewButton);

        JPanel panel_1 = new JPanel();
        frame.getContentPane().add(panel_1, BorderLayout.CENTER);
        panel_1.setLayout(new BorderLayout(0, 0));

        JScrollPane scrollPane = new JScrollPane();
        panel_1.add(scrollPane, BorderLayout.CENTER);

        textArea = new JTextArea();
        scrollPane.setViewportView(textArea);
    }

    /**
     * 连接服务器
     */
    private void connect() {
        try {
            socket = new Socket("localhost", 8000);
            System.out.println("连接服务器成功!");

            //初始化输入输出流
            in = new DataInputStream(socket.getInputStream());
            out = new DataOutputStream(socket.getOutputStream());

            //读取服务器信息
            new Thread(new Runnable() {

                @Override
                public void run() {
                    String message = "";
                    while (true) {
                        try {
                            message = in.readUTF();
                            textArea.append(message + "\n");
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }).start();

        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    ChatClient window = new ChatClient();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

总结

以上就是实现Java GUI多人聊天的完整攻略。其中,我们首先确定了实现方式,并编写了Server和Client端的代码;接着,我们创建了一个简单的GUI界面,用于实现多人聊天功能。该程序可以扩展为多人聊天室、群聊等更为复杂的场景。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javaGUI实现多人聊天功能 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • Java经典面试题最全汇总208道(一)

    Java经典面试题最全汇总208道(一)是一篇非常详细的关于Java面试题的攻略文档。本文共分为以下几个部分: Java基础 集合 多线程 JVM Spring 设计模式 网络编程 数据库 每个部分都细致的从概念到实例进行了详细的说明。下面将对每个部分进行简要的介绍。 Java基础 Java基础部分主要介绍了Java的概念、特性、数据类型等。还包括了关于对象…

    Java 2023年5月23日
    00
  • Java中ArrayList集合的常用方法大全

    Java中ArrayList集合的常用方法大全 1. ArrayList简介 ArrayList是Java中最常用的集合之一,它是一个动态的数据结构,就像一个可变长度的数组,可以随时添加和删除元素。它可以存储任何类型的对象,包括基本数据类型的包装类。 2. 创建ArrayList 要使用ArrayList,首先需要在代码中创建它。下面是几种创建ArrayLi…

    Java 2023年5月26日
    00
  • java之Object类用法实例

    Java之Object类用法实例 在Java中,所有的类都是继承自Object类,因此Object类是Java中最基本的类之一。本文将详细讲解Object类的用法,包括几个重要的方法以及示例说明。 Java Object类的方法 toString() toString() 方法是Object类中最基本的方法之一,通常用于返回对象的字符串表示。默认情况下,to…

    Java 2023年5月26日
    00
  • Sprint Boot @JsonFormat使用方法详解

    @JsonFormat是Spring Boot中的一个注解,用于指定Java对象在序列化为JSON字符串时的日期格式。在本文中,我们将详细介绍@JsonFormat注解的作用和使用方法,并提供两个示例。 @JsonFormat注解的作用 @JsonFormat注解用于指定Java对象在序列化为JSON字符串时的日期格式。当使用@JsonFormat注解标记一…

    Java 2023年5月5日
    00
  • java webservice上传下载文件代码分享

    下面是“java webservice上传下载文件代码分享”的完整攻略: 1. 准备工作 在开始实现文件上传下载的功能之前,我们需要准备好以下几点: 安装Java与Eclipse IDE开发环境; 下载并安装Apache Tomcat服务器; 导入JAX-WS 开发包,以便能够使用JAX-WS创建Webservice服务。 2. 创建文件上传下载的Webse…

    Java 2023年5月19日
    00
  • JSP 自定义注解及记录操作日志

    下面是详细讲解“JSP 自定义注解及记录操作日志”的完整攻略: 什么是JSP自定义注解 注解是一种可插入到 Java 代码中的标记,这些标记可以在编译、运行时被读取,并执行特定的处理。在 JSP 中,可以使用注解添加自定义标记,可以让 JSP 页面更灵活、更易读、更易维护。 JSP自定义注解的使用方法 在 JSP 类中使用注解,需要先定义注解: @Reten…

    Java 2023年6月15日
    00
  • 详解Spring与MyBatis的整合的方法

    当我们需要将Spring和MyBatis结合在一起使用时,可以采用以下步骤来实现: 1. 项目搭建 首先我们需要搭建一个Spring项目,可以使用Spring Boot或者Spring MVC。如果使用Spring Boot,则可以选择自动配置MyBatis的starter,这样无需手动配置MyBatis。如果使用Spring MVC,则需要手动配置MyBa…

    Java 2023年5月19日
    00
  • Spring IOC中的Bean对象用法

    Spring IOC中的Bean对象用法 Spring的IOC容器是Spring框架的核心,它使用DI(Dependency Injection,即依赖注入)实现了Spring框架的解耦,在整个应用中统一管理了所有的Bean对象。 1. 常见的Spring IOC容器 Spring中常用的IOC容器有两种: BeanFactory ApplicationCo…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部