这是一篇关于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类
点击图中三角号,启动客户端。
启动后,进入登录界面: