8.3总结

news2024/9/23 5:34:54

1.改进渲染

这个渲染为了美观我做了很久花了好多时间,,,

                    // 加载头像图像
                    InputStream inputStream = new ByteArrayInputStream(message.getFileBytes());
                    Image image = new Image(inputStream); // 第二个参数表示是否缓存图片,根据需要设置
                    imageView.setImage(image);

                    // 设置头像视图大小
                    imageView.setFitWidth(50);
                    imageView.setFitHeight(50);



                    // 聊天气泡效果的容器
                    Pane messageBubble = new Pane();
                    messageBubble.setStyle("-fx-background-color: #e0e9ff; -fx-background-radius: 10;");
                    messageBubble.setMaxWidth(200); // 设置最大宽度
                    messageBubble.setPadding(new Insets(5)); // 设置内边距
                    messageBubble.getChildren().add(messageText);

2.修改聊天bug 

之前三个人聊天会有些问题

 //根据message获取getterid,然后再得到对应先线程
                    ServerConnectClientThread serverConnectClientThread=ManageClientThreads
                            .getServerConnectClientThread(message.getGetter());

                    BaseService.GetM(message.getSender(),message);


                    //得到对应socket的对象输出流,将message对象转发给指定的客户端
                    ObjectOutputStream oos=new ObjectOutputStream(serverConnectClientThread.getSocket().getOutputStream());
                    oos.writeObject(message);//转发,如果客户不在线,可以保存到数据库,这样可以实现离线留言

                    Message message1=new Message();
                   message1=message;
                    //得到对应socket的对象输出流,将message对象转发给指定的客户端
                    ObjectOutputStream oos1=new ObjectOutputStream(socket.getOutputStream());
                    message1.setMesType(MessageType.MESSAGE_COMM_MES);
                    oos1.writeObject(message1);

3.完善了,添加好友与请求处理

添加好友改了表,好友申请表和好友列表,能实时更新,还有打开更新。

//界面初始化,我的好友
    public static void sendupdateListFriend(String user1){
        Connection conn = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;

        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection(URL, USER, PASSWORD);

            // 2. 准备 SQL 查询语句
            String sql = "SELECT * FROM friendstable WHERE User1 = ?";
            stmt = conn.prepareStatement(sql);
            stmt.setString(1, user1); // 设置查询参数

            // 3. 执行查询
            rs = stmt.executeQuery();

            // 4. 处理查询结果
            while (rs.next()) {
                String user2 = rs.getString("User2");

                // 这里可以根据需要处理每行数据,例如打印输出或者其他逻辑处理
                Message message1=new Message();
                message1.setGetter(user2);
                BaseService.GetM(user2,message1);

                try {
                    ObjectOutputStream objectOutputStream=new ObjectOutputStream(ManageClientThreads.getServerConnectClientThread(user1).getSocket().getOutputStream());
                    message1.setMesType(MessageType.MESSAGE_UPDATELISTVIEW_FRIEND);
                    objectOutputStream.writeObject(message1);
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
                System.out.println(user1 +"初始好友列表有:"+user2);
            }

        } catch (ClassNotFoundException e) {
           e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }


    //界面,我的好友更新
    public static void sendupdateListFriendEnd(String user1){
        Connection conn = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;

        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection(URL, USER, PASSWORD);

            // 2. 准备 SQL 查询语句
            String sql = "SELECT * FROM friendstable WHERE User1 = ?";
            stmt = conn.prepareStatement(sql);
            stmt.setString(1, user1); // 设置查询参数

            // 3. 执行查询
            rs = stmt.executeQuery();

            // 4. 处理查询结果
            while (rs.next()) {
                String user2 = rs.getString("User2");

                // 这里可以根据需要处理每行数据,例如打印输出或者其他逻辑处理
                Message message1=new Message();
                message1.setGetter(user2);
                BaseService.GetM(user2,message1);


                try {
                    //清空好友列表的
                    if(ManageClientThreads.getServerConnectClientThread(user2)!=null){
                        Message message2=new Message();
                        ObjectOutputStream objectOutputStream2=new ObjectOutputStream(ManageClientThreads.getServerConnectClientThread(user2).getSocket().getOutputStream());
                        message1.setMesType(MessageType.MESSAGE_UPDATELISTVIEW_FRIEND_clear);
                        objectOutputStream2.writeObject(message1);

                        BaseService.sendupdateListFriend(user2);
                    }


                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
                System.out.println(user1 +"初始好友列表有:"+user2);
            }

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }

4.展示好友资料

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1976731.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

达梦数据库dsc集群动态添加节点

前提条件:在安装好的的dsc集群:达梦数据库dsc集群保姆级部署文档_达梦数据库文档-CSDN博客上动态添加节点 1、环境信息 扩展节点信息: 操作环境:VMware Workstation 16 Pro dmdsc集群 机器ip 主机名 操作系统 资源配置 实…

mac中dyld[5999]: Library not loaded: libssl.3.dylib解决方法

需要重新安装下openssl3.0版本 brew reinstall openssl3.0 安装后执行还是报错,需要找到openssl的安装路径 /opt/homebrew/Cellar/openssl3.0/3.0.14/lib/ 将libssl.3.dylib和libcrypto.3.dylib拷贝到自己的二进制文件同目录下,再执行二进制文件就可…

YUM软件包管理工具:更改YUM源、配置本地YUM仓库

文章目录 YUM软件包管理工具更改YUM源配置过程网络出错,配置网卡 本地YUM仓库配置挂载配置本地yum源 YUM软件包管理工具 YUM(Yellowdog Updater, Modified)是一个在Linux系统中广泛使用的开源软件包管理工具,尤其常见于Fedora、R…

图论① dfs | Java | LeetCode 797,Kama 98 邻接表实现(未完成)

797 所有可能路径 https://leetcode.cn/problems/all-paths-from-source-to-target/description/ 输入&#xff1a;graph [[1,2],[3],[3],[]] 题目分析&#xff0c;这里 class Solution {//这个不是二维数组&#xff0c;而是listList<List<Integer>> res new Ar…

【Python系列】Python 字典合并

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【教学类-72-01】20240803建筑对称图纸01

背景需求 通义万相下载“对称建筑&#xff0c;简笔画” 我想把“对称建筑”做成对称的样式&#xff0c;类似《对称脸》 【教学类-36-12-01】20240302儿童对称正脸图&#xff08;一&#xff09;4图右脸4图左脸&#xff08;中班《幼儿园里朋友多》&#xff09;&#xff08;midj…

高等数学精解【4】

文章目录 平面方程直角坐标及基本运算 参考文献 平面方程 直角坐标及基本运算 向量的四则运算 下面由文心一言自动生成 向量的四则运算主要包括加法、减法、数乘&#xff08;标量乘法&#xff09;和数量积&#xff08;点积或内积&#xff09;&#xff0c;但通常不直接称为“除…

GuLi商城-商品服务-API-新增商品-获取分类关联的品牌

这个接口在上一篇文章中已经写过了&#xff0c;功能已经实现了&#xff0c;这里略

Vue3 核心模块源码解析

Vue3 核心模块源码解析 1、Vue3 模块源码解析1.1 compiler-core1.1.1 目录结构1.1.2 compile逻辑 1.2 reactivity1.2.1 目录结构1.2.2 reactivity逻辑 1.3 runtime-core1.3.1 目录结构1.3.2 runtime核心逻辑 1.4 runtime-dom1.4.1 主要功能 1.5 runtime-test1.5.1 目录结构1.5.…

深入理解接口测试:实用指南与最佳实践(一) 环境安装

​ ​ 您好&#xff0c;我是程序员小羊&#xff01; 前言 这一阶段是接口测试的学习&#xff0c;我们接下来的讲解都是使用Postman这款工具&#xff0c;当然呢Postman是现在一款非常流行的接口调试工具&#xff0c;它使用简单&#xff0c;而且功能也很强大。不仅测试人员会使用…

【linux】【操作系统】内核之system_call.s源码阅读

system_call.s汇编代码是 Linux 内核的一部分&#xff0c;负责处理系统调用、定时器中断、硬盘中断、软盘中断和并行端口中断。下面是各个部分的详细说明&#xff1a; 系统调用处理 (_system_call) 功能 处理系统调用请求。根据传入的系统调用编号 (%eax) 调用相应的系统调用…

Linux修炼之路之进程地址空间

目录 一&#xff1a;程序地址空间 二&#xff1a;相关细节知识 接下来的日子会顺顺利利&#xff0c;万事胜意&#xff0c;生活明朗-----------林辞忧 一&#xff1a;程序地址空间 1.在学习c/c时&#xff0c;经常会听到堆区&#xff0c;栈区&#xff0c;代码段&#xff0c;常量…

IoTDB 入门教程 企业篇②——IoTDB-Workbench可视化控制台

文章目录 一、前文二、首页三、实例管理四、系统管理五、查询六、测点管理 一、前文 IoTDB入门教程——导读 IoTDB-Workbench同样是通过联系天谋科技商务&#xff0c;请求免费试用的。 请求试用激活启动的操作步骤&#xff0c;详情请见&#xff1a;IoTDB 入门教程 企业篇①——…

SQL注入实例(sqli-labs/less-4)

0、初始页面 1、确定闭合符号 前两条判断是否为数值型注入&#xff0c;后两条判断字符型注入的闭合符号 ?id1 and 11 ?id1 and 12 ?id1" ?id1") 2、确定表的列数 ?id1") order by 3 -- 3、确定回显位置 ?id-1") union select 1,2,3 -- 4、爆库…

RabbitMQ 应用

目录 1. 7种工作模式 1.1 Simple&#xff08;简单模式&#xff09; 1.2 Work Queue&#xff08;工作队列&#xff09; 1.3 Publish/Subscribe&#xff08;发布/订阅&#xff09; 1.4 Routing&#xff08;路由模式&#xff09; 1.5 Topics&#xff08;通配符模式&#xff09; 1.…

Yolov8在RK3588上进行自定义目标检测(四)

参考 Yolov8在RK3588上进行自定义目标检测(一) Yolov8在RK3588上进行自定义目标检测(二) Yolov8在RK3588上进行自定义目标检测(三) YOLOV8火灾检测模型的边缘端推理 验证rknn模型 1.将转换好的rknn模型上传到板子上&#xff0c;再在板子上安装rknn-toolkit-lite2,将上面的…

Nexus3 Repository代理pypi设置与应用

目录 1. 创建Blob库并指定路径 2. 创建pypi阿里镜像源 3. 创建pypi腾讯镜像源 4. 创建一个pypi组管理 5. 配置pip 6. 下载测试 扩展&#xff1a;配置好后无法下载解决思路。 Nexus 存储库中的 Blob 存储是指一种用于存储大量非结构化数据的技术。在 Nexus 存储库的上下文…

基于YOLOv8的垃圾检测系统

基于YOLOv8的垃圾检测系统 (价格85) 包含 [硬纸板&#xff0c;玻璃&#xff0c;金属&#xff0c;有机废物&#xff0c;纸&#xff0c;塑料] 6个类 通过PYQT构建UI界面&#xff0c;包含图片检测&#xff0c;视频检测&#xff0c;摄像头实时检测。 &#xff08;该系统可以…

马来西亚原生静态IP注册的账号稳定吗?

马来西亚作为东南亚重要的经济体之一&#xff0c;其网络基础设施和互联网服务水平在近年来有了显著提升。静态IP作为一种固定的互联网协议地址&#xff0c;对于某些特定的网络应用和需求非常重要。本文将围绕马来西亚原生静态IP注册的账号稳定性进行探讨&#xff0c;分析其在不…

JVM—虚拟机类加载器

参考资料&#xff1a;深入理解Java虚拟机&#xff1a;JVM高级特性与最佳实践&#xff08;第3版&#xff09;周志明 1. 类加载器 JVM设计团队有意把类加载阶段中的 “通过一个类的全限定名来获取该类的二进制字节流” 这个动作放到JVM外部实现&#xff0c;这个动作的代码称为类…