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日

相关文章

  • 解决struts2 拦截器修改request的parameters参数失败的问题

    首先,我们需要了解为什么拦截器无法修改参数。这是因为Struts 2在请求参数提交后,将参数作为只读值放到了ValueStack中,而拦截器只能获取到ValueStack中原有的参数值,而不能修改ValueStack中的参数。 要解决这个问题,我们需要使用Struts2提供的params拦截器。这个拦截器会在Action执行之前拦截请求,并将请求参数转换为可…

    Java 2023年5月20日
    00
  • Java基础夯实之线程问题全面解析

    Java基础夯实之线程问题全面解析 什么是线程? 线程是计算机在执行程序时,处理器上的一个执行单元,每个线程之间都是互相独立的执行流。线程可以同时运行在同一个进程中的多个线程之间共享内存和其它资源,这样可以提高程序的并发性和运行效率。 为什么要使用线程? 使用线程可以提高程序的并发性和运行效率,同时通过将耗时的计算和IO操作放在单独的线程中可以保证主线程的流…

    Java 2023年5月18日
    00
  • SpringBoot中热部署配置深入讲解原理

    SpringBoot中热部署配置深入讲解原理 热部署是指在应用程序运行时,对代码进行修改后,无需重启应用程序即可使修改生效。在Spring Boot中,可以通过配置实现热部署。本文将深入讲解Spring Boot中热部署的原理,并提供两个示例。 原理 Spring Boot中的热部署是通过Spring Boot DevTools实现的。Spring Boot…

    Java 2023年5月15日
    00
  • MDC轻量化日志链路跟踪的若干种应用场景

    “If debugging is the process of removing software bugs, then programming must be the process of putting them in.” – Edsger Dijkstra “如果调试是消除软件Bug的过程,那么编程就是产出Bug的过程。” —— 艾兹格·迪杰斯特拉 0…

    Java 2023年4月22日
    00
  • Java编程实现springMVC简单登录实例

    下面我来详细讲解Java编程实现springMVC简单登录实例的攻略,包括如何搭建环境、代码实现过程和相关注意事项。 环境搭建 在实现SpringMVC登录功能之前,我们需要完成相关的环境搭建。以下是必要的环境要求: JDK 8或以上版本 Eclipse IDE for Enterprise Java Developers(或其他Java开发环境) Mave…

    Java 2023年5月16日
    00
  • Maven入门之使用Nexus搭建Maven私服及上传下载jar包

    这里是“Maven入门之使用Nexus搭建Maven私服及上传下载jar包”的完整攻略。 准备工作 安装JDK和Maven 下载和安装Nexus 启动Nexus 配置Maven仓库 Nexus默认内置了一个Maven2仓库。如果需要创建自己的仓库,可以按如下步骤操作: 点击页面左侧的“Repositories”选项卡 在页面上方点击“Create Repos…

    Java 2023年5月20日
    00
  • Java Arrays.sort()用法详解

    Java Arrays.sort()用法详解 Arrays.sort()是Java中的一个标准库函数,用于对数组进行排序,它可以对任何类型的数组进行排序(例如,整型、浮点数、字符串等等),本文将对该函数的用法进行详解。 语法 Arrays.sort(array, [fromIndex], [toIndex], [comparator]) array 参数是要…

    Java 2023年5月26日
    00
  • Java中的逻辑结构详解

    Java中的逻辑结构详解 什么是逻辑结构? 在计算机科学领域中,逻辑结构是程序中的控制结构,用于描述程序执行的流程。通常情况下,逻辑结构包括三种基本类型:顺序结构、选择结构和循环结构。 顺序结构 顺序结构是指程序按照一定的顺序执行,每个语句按照先后顺序执行,直到程序结束。在Java中,顺序结构是最基本的结构。 public class Example1 { …

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