学习总结(TAT)

news2024/11/24 9:06:38

好久都没交总结了,今天把之前的思路和错误整理了一下:

在服务器和客户端两侧,不可以同时先初始化获取输入流,否则会造成堵塞,同时为这位作者大大打call:

(3条消息) 关于Java Socket和创建输入输出流的几点注意_明明班长的博客-CSDN博客

还有就是如果客户端和服务器想要用同一个类,可以在两边都复制相同的类,但是要注意,如果这个类在包下,一定要将包也复制一份不然你都不知道自己怎么错的QAQ; 比如在客户端是这样的:

也就是common包包下有一个这个类,但是服务端也要用到这个类,这时候可以把它复制过去:

 重要的事说三遍,记得复制包包也要一样,包名要一样!!!

还有就是在写鼠标点击或者键盘的按压事件(当然,按钮就不要了,按钮有一个专门的方法Action)后要在这个ideal里面这样改,不然事件不匹配;

进去控制类对应的fxml文件,然后将 其打开,在有黄色的鼠标点击事件或者键盘按压事件右击show...什么的,也就是第一个,然后有一个change。。。的会弹出来一个弹框直接点击refactor就行了。(QAQ有点抽象)

如果fxml和view没有在一个包下,比如我是这样的,就要将路径都改成这样的:也就是加载fxml是这样写:

  Parent root = FXMLLoader.load(LoginView.class.getClassLoader().getResource("fxml/login.fxml") );

如果想要在不是某个控制器类的组件下用该组件,有这样一个模板获得该控制器,先是在view界面这样写:

public class ChatRoomView {
    public static Stage chatRoomStage;
    private static ChatRoomController controller; // 添加一个控制器对象的引用

    public static void start(Stage primaryStage) throws IOException {
        chatRoomStage = primaryStage;
        FXMLLoader loader = new FXMLLoader(ChatRoomView.class.getClassLoader().getResource("fxml/chatroom.fxml"));
        Parent root = loader.load();

        controller = loader.getController(); // 获取FXML文件关联的控制器对象

        primaryStage.setTitle("小花花聊天室");
        primaryStage.setScene(new Scene(root, 800, 600));
        primaryStage.show();
    }

    public static ChatRoomController getController() {
        return controller;
    }
}

字符串比较一定要用equals,不然自己怎么错了都不知道。少用”==“少用,少用!!!但是不得不说,equals只能是等于,所以用不等于可以在前面加一个!记得添上括号;

还有就是静态变量不可以序列化,熟记熟记熟记,当然如果实在想要序列化可以取巧,比如在一个列里面想要将这个类静态化便于利用,但是又要传,这时候可以定一个临时变量和这个要传的变量同类型;将静态变量赋值给它,本人亲测,真的可以😁;

一般一个输入流对应一个输出流,如果涉及到socket的话,最好两个同时关闭,不要用完一个关闭一个,不然第二个用不了;比如用完输出流输出一次之后就关了,这时候再读取就用不了,因为这时候关闭输出流的时候将socket也给关了;但是正规关闭最后还是要关socket的;

如果在初始化写某个临时组件的点击事件没有用的话,可能是你的顺序放错了,理清思路。(比如有一些是要先在初始化方法里面现附上初始值才可以操作,这时候赋值操作就一定要在这个前面了),还有就是一般一个界面打开一次才动用一次初始化方法,但是如果这个初始化方法里面有点击事件导致界面大幅度变化的也会触发初始化方法;

至于为什么和User用户类有仇我也不想纠结了,换一个名字就不会数据错乱了,所以没去深究,值得说的是,在多个请求情况下,哪怕有些数据是有先后顺序的,还是要对两边的通讯设置接受条件,以防数据传错,所以说,数据的判断条件最好放在一个类里面,不然会很心累TAT~;

还有就是在Javafx里面,有一个UI界面的主线程,但是有一些界面UI更新比较慢(涉及到要去数据库什么的获取数据),会阻塞主线程,导致界面卡死,这时候可以通过Task类和Platform来辅助实现:比如我这个点击事件:

  friendList.setOnMouseClicked(event -> {
            Friend selectedFriend = friendList.getSelectionModel().getSelectedItem();
            getMy = selectedFriend;
            accountt.add(getMy.getAccount());
            accountt.add(ManageClientToThread.u.getUserAccount());
            // 创建一个后台任务来加载聊天记录数据
            Task<ArrayList<Message>> getFriendsTask = new Task<ArrayList<Message>>() {
                @Override
                protected ArrayList<Message> call() throws Exception {
                    if (tempMessage != null) {
                        new MessageClientService().insertMessage(tempMessage);
                    }
                    imageA=ucs1.imageAvar(accountt);
                    return new MessageClientService().initMessagerecord(ManageClientToThread.u.getUserAccount(), selectedFriend.getAccount());
                }
            };
            // 设置任务完成后的处理逻辑
            getFriendsTask.setOnSucceeded(e -> {
                ArrayList<Message> messages = getFriendsTask.getValue();
                // 在主线程中更新UI
                Platform.runLater(() -> {
                    // 清空聊天框中的内容
                    flowPane1.getChildren().clear();
                    // 将加载的聊天记录填充到聊天框中
                    for (Message msg : messages) {
                        System.out.println("加一个消息");
                        addBox(msg);
                    }
                    System.out.println("到底来了不?");
                });
            });

            // 启动任务
            Thread thread = new Thread(getFriendsTask);
            thread.setDaemon(true); // 设置为守护线程(可选)
            thread.start();
        });

批量查询不是什么其他的,只能是execute或者executeQuery,Batch不可以用于查询,不可以!!!

关于类静态变量没有过构造器这件事,切记切记,要用初始化用静态构造块,真的要记住!!!

关于正则判断,我真的要说五遍,表示路径里面的一个单线杠要用四个‘\’(单引号里面的,不包括单引号);这里是chat的一点解释,主要是靠自己理解QAQ:

目前就是这些,把自己之前受过的委屈发出来真是太爽了!!! 

然后再稍稍励志一下:如果这段时间你觉得很疲惫,觉得全是坎坷,请相信这是老天对你赐福的考验,熬过了这段时间,接下来全是好运

 

 

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

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

相关文章

龙芯积极研发二进制翻译,提升软硬件兼容性,提高LoongArch架构

根据8月8日Phoronix报道&#xff0c;龙芯正在积极研发龙芯二进制翻译功能&#xff08;Loongson Binary Translationm&#xff0c;LBT&#xff09;以提高LoongArch架构与其他处理器&#xff08;如MIPS/x86/Arm&#xff09;的二进制翻译能力&#xff0c;这重要举措将显著提升龙芯…

【沁恒蓝牙mesh】CH58x flash分区之利用随机数作为蓝牙mesh地址

本文主要介绍了 沁恒蓝牙芯片 CH58x 的flash 分区与数据存储管理&#xff0c;利用随机数作为蓝牙mesh地址&#xff0c;蓝牙mesh采用自组网 &#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是喜欢记录零碎知识点的小菜鸟。&#x1f60e;&#…

【容器化】Oceanbase镜像构建及使用

通过该篇文章可以在国产X86-64或ARM架构上构建商业版oceanbase,只需要替换pkg安装包即可。下面截图主要以国产X86-64安装为例,作为操作截图: 镜像构建目录说明 pkg:用来存放安装包及脚本,抛出rpm其他是脚步,这些rpm包可以下载不同系统架构的包,构建镜像时该目录只需要保…

45.杜芬方程解仿真解曲线(matlab程序)

1.简述 Dufing方程是一种重要的动力系统山&#xff0c;是反映工程物理系统中非线性现象和混沌动力学行为的极其重要的方程式。通过Duffing方程可以探讨铁磁谐振电路中的分岔、拟周期运动、子谐波振荡。而在非线性与混沌系统的研究中&#xff0c;Duffing方程展示了丰富的混沌动力…

12.操作符详解(位操作符、逗号表达式、下标访问操作符、函数调用操作符、操作数的优先级)

这里写目录标题 1.位操作符1.1左移操作符&#xff08;<<&#xff09;1.2右移操作符&#xff08;>>&#xff09;1.3按位与操作符&#xff08;&&#xff09;1.4按位或操作符&#xff08;|&#xff09;1.5异或操作符&#xff08;^&#xff09;1.6取反操作符&#…

SPF9139全力适配ios16与鸿蒙3.0,超实用数据提取、分析、恢复能力UP!

​ 如今&#xff0c;群聊已成为人们必不可少的沟通窗口 家人群&#xff0c;好友群&#xff0c;班级群 粉丝群&#xff0c;交友群&#xff0c;工作群 …… 各类群聊铺天盖地般涌来的同时 也有一些群聊沦为了 赌博、传播淫秽视频、发表不当言论 等违法犯罪行为滋生之地 与…

滑动窗口——缓冲区大小

文章目录 作用处理过程三次握手四次挥手的全部流程 窗口理解为缓冲区的大小&#xff0c;滑动窗口的大小会随着发送数据和接收数据而变化。 通信双方都有发送缓冲区和接收缓冲区。 服务器&#xff1a; 发送缓冲区 接收缓冲区 客户端&#xff1a; 发送缓冲区 接收缓冲区 作用 处…

C++项目,出现debug能正常编译release编译报错的情况

编写了一个DLL库文件&#xff0c;发现可以正常编译生成debug的库&#xff0c;但是release的部分编译报错。列举过程中出现的错误解决办法&#xff1a; 1.报错点&#xff1a;fatal error C1189: #error: Building MFC application with /MD[d] … fatal error C1189: #error: B…

前端进阶html+css04----盒子模型

1.一个盒子由content&#xff08;文本内容)&#xff0c;padding,border,margin组成。 2.盒子的大小指的是盒子的宽度和高度。一般由box-sizing属性来控制。 1&#xff09;默认情况下, 也就是box-sizing: content-box时&#xff0c;盒子的宽高计算公式如下&#xff1a; 盒子宽…

使用 Splashtop Secure Workspace 改进安全访问

前言&#xff1a;Splashtop 首席执行官兼联合创始人 Mark Lee 我们在十多年前推出 Splashtop 远程访问和支持产品线时&#xff0c;专注于为用户提供高性能和卓越的用户体验&#xff0c;以便用户能够随处访问计算资源。如今&#xff0c;我们有25万企业客户和3000万个人用户&…

如何使用Java发邮件

首先要知道一点&#xff0c;发送邮件不需要像发送短信那样购买具体的定制化服务&#xff0c;可以理解为发送短信是一个涉及到具体的物理设备&#xff0c;比如基站等这些东西&#xff0c;而邮件的服务成本没有那么高&#xff0c;它是一个比较纯粹的软件服务。 其次你要知道那个…

Stable Diffusion教程(9) - AI视频转动漫

配套抖音视频教程&#xff1a;https://v.douyin.com/UfTcrcJ/ 安装mov2mov插件 打开webui点击扩展->从网址安装输入地址&#xff0c;然后点击安装 https://github.com/Scholar01/sd-webui-mov2mov 最后重启webui 下载模型 从国内liblib AI 模型站下载模型 LiblibAI哩…

从到店到到家,本土便利店正在围猎外资三巨头

全家在中国市场接连关店约300多家&#xff0c;7-11关闭或迁移全球市场的门店约1000家&#xff0c;罗森深圳公司2022年疑似亏损近8000万。 近三年来&#xff0c;以全家、7-11和罗森三家为代表的外资便利店企业&#xff0c;正在遭遇中国本土便利店品牌从到店到家的双重围猎。 20…

分析一下vue3下会造成响应式丢失的情况

前言 在我们从vue2过渡到vue3的时候&#xff0c;对于数据响应式的变化其实是懵懵懂懂的。从以往直接在data函数里面定义变量到每一次都要使用ref/reactive时&#xff0c;是有些不适应的。但问题不大&#xff0c;毕竟在大前端时代中&#xff0c;如果不及时跟上时代的步伐&#…

在生产环境中部署Elasticsearch:最佳实践和故障排除技巧——聚合与搜索(三)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

SDUT 2023 summer team contest(for 22) - 13

B - Hoppers 题意&#xff1a;给你一张无向图&#xff0c;可以选定一个点染色&#xff0c;随后距离为2的点都会被染色(可以传染&#xff09;。求至少需要向图中添加几条边使得选定一个点染色后可以将整个图染色。(不一定是连通图&#xff09; 思路&#xff1a;如果一个连通块是…

代码随想录算法训练营day60

文章目录 Day60 柱状图中最大的矩形题目思路代码 Day60 柱状图中最大的矩形 84. 柱状图中最大的矩形 - 力扣&#xff08;LeetCode&#xff09; 题目 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图…

Learning Rich Features for Image Manipulation Detection阅读笔记

文章目录 Abstract3.3. 双线性池 Abstract 图像篡改检测与传统的语义目标检测&#xff08;semantic object detection&#xff09;不同&#xff0c;因为它更关注篡改伪影&#xff08;tampering artifacts&#xff09;而不是图像内容&#xff0c;这表明需要学习更丰富的特征。我…

【Java】异常处理 之 Java的异常

Java的异常 在计算机程序运行的过程中&#xff0c;总是会出现各种各样的错误。 有一些错误是用户造成的&#xff0c;比如&#xff0c;希望用户输入一个int类型的年龄&#xff0c;但是用户的输入是abc&#xff1a; // 假设用户输入了abc&#xff1a; String s "abc&quo…

UNIX网络编程卷一 学习笔记 第二十七章 IP选项

IPv4允许在20字节的首部固定部分后跟最多共40字节的选项。尽管已经定义了10种IPv4选项&#xff0c;但最常用的是源路径选项。我们可通过存取IP_OPTIONS套接字选项访问这些选项&#xff0c;我们存取该套接字选项时&#xff0c;所用的缓冲区中的值就是它们置于IP数据报中的格式。…