JAVA版聊天室小软件

发布于:2022-11-06 ⋅ 阅读:(470) ⋅ 点赞:(0)

这是一篇关于JAVA的聊天室室小软件,用的swing的技术同时也用到了socket。今天发布出来,希望能帮到大家。


开发环境

开发工具:IDEA2021.3.1
JDK版本:JDK8
JDK其他版本会有问题


项目结构

请添加图片描述
启动后服务的Server。

请添加图片描述
启动客户端MainLauncher

下载地址:

链接:https://pan.baidu.com/s/1CqRtwb-5Vbj8J-UmrPFi6w
提取码:4ysl


一、运行画面展示

请添加图片描述
登录界面,选择性别,输入用户名
请添加图片描述
聊天界面,第一个进来的界面里只有一个人

请添加图片描述
再登录一个账号。
请添加图片描述
两个人可以相互通信的界面


二、代码部分

1.客户端启动代码

package com.bjpowernode.client;

import javafx.application.Application;
import javafx.application.Platform;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

public class MainLauncher extends Application {

    private static Stage primaryStageObj;

    @Override
    public void start(Stage primaryStage) throws Exception {
        primaryStageObj = primaryStage;
        Parent root = FXMLLoader.load(getClass().getClassLoader().getResource("views/LoginView.fxml"));
        primaryStage.initStyle(StageStyle.UNDECORATED);
        primaryStage.setTitle("一起来聊天");
        primaryStage.getIcons().add(new Image(getClass().getClassLoader().getResource("images/logo.png").toString()));
        Scene mainScene = new Scene(root, 350, 420);
        mainScene.setRoot(root);
        primaryStage.setResizable(false);
        primaryStage.setScene(mainScene);
        primaryStage.show();
        primaryStage.setOnCloseRequest(e -> Platform.exit());
    }


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

    public static Stage getPrimaryStage() {
        return primaryStageObj;
    }
}

2.后台启动代码

package com.bjpowernode.server;

import com.bjpowernode.bean.User;

import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.util.HashMap;
import java.util.HashSet;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class Server {
    public static HashMap<String, User> userMap = new HashMap<>();
    public static HashSet<ObjectOutputStream> writers = new HashSet<>();
    //线程池对象
    public static ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(16, 32, 1, TimeUnit.MINUTES, new ArrayBlockingQueue<>(16));

    public static void main(String[] args) {
        try(ServerSocket listener = new ServerSocket(9001)) {
            while (true) {
                poolExecutor.execute(new Handler(listener.accept()));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3.启动方法

先启动后台。找到com/bjpowernode/server/Server.java类,点击图中三角号。
请添加图片描述
让后台运行起来,如图:
请添加图片描述
后来启动起来的画面,只是多了一个窗口,并没有其他的变化。

接下来启动客户端,找到com/bjpowernode/client/MainLauncher.java类
请添加图片描述
点击图中三角号,启动客户端。
启动后,进入登录界面:
请添加图片描述