学习总结(TAT)

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

在服务器和客户端两侧,不可以同时先初始化获取输入流,否则会造成堵塞,同时为这位作者大大打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>>() {@Overrideprotected 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();// 在主线程中更新UIPlatform.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.mzph.cn/news/33090.shtml

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

相关文章

一、安全世界观

文章目录 1、 Web安全简史1.1 中国黑客简史1.2 黑客技术的发展历程1.3 web安全的兴起 2、黑帽子、白帽子3、安全的本质4、安全三要素5、如何实施安全评估5.1 资产等级划分5.2 威胁分析5.3 风险分析5.4 设计安全方案 6、白帽子兵法6.1 Secure By Default6.2 纵深防御原则6.3 数据…

学习51单片机怎么开始?

学习的过程不总是先打好基础&#xff0c;然后再盖上层建筑&#xff0c;尤其是实践性的、工程性很强的东西。如果你一定要先全面打好基础&#xff0c;再学习单片机&#xff0c;我觉得你一定学不好&#xff0c;因为你的基础永远打不好&#xff0c;因为基础太庞大了&#xff0c;基…

Oracle 知识篇+会话级全局临时表在不同连接模式中的表现

标签&#xff1a;会话级临时表、全局临时表、幻读释义&#xff1a;Oracle 全局临时表又叫GTT ★ 结论 ✔ 专用服务器模式&#xff1a;不同应用会话只能访问自己的数据 ✔ 共享服务器模式&#xff1a;不同应用会话只能访问自己的数据 ✔ 数据库驻留连接池模式&#xff1a;不同应…

探索数据之美:初步学习 Python 柱状图绘制

文章目录 一 基础柱状图1.1 创建简单柱状图1.2 反转x和y轴1.3 数值标签在右侧1.4 演示结果 二 基础时间线柱状图2.1 创建时间线2.2 时间线主题设置取值表2.3 演示结果 三 GDP动态柱状图绘制3.1 需求分析3.2 数据文件内容3.3 列表排序方法3.4 参考代码3.5 运行结果 一 基础柱状图…

Nodejs安装及环境变量配置(修改全局安装依赖工具包和缓存文件夹及npm镜像源)

本机环境&#xff1a;win11家庭中文版 一、官网下载 二、安装 三、查看nodejs及npm版本号 1、查看node版本号 node -v 2、查看NPM版本号&#xff08;安装nodejs时已自动安装npm&#xff09; npm -v 四、配置npm全局下载工具包和缓存目录 1、查看安装目录 在本目录下创建no…

瓴羊发布All in One 产品,零售SaaS的尽头是DaaS?

“打破烟囱、化繁为简&#xff0c;让丰富的能力、数据和智能All in One”&#xff0c;这是瓴羊新发布的产品瓴羊One承担的使命&#xff0c;也意味着瓴羊DaaS事业迈入了一个新阶段。 成立伊始&#xff0c;瓴羊就打出了“Not SaaS&#xff0c;But DaaS”旗号&#xff0c;将自己的…

小程序裂变怎么做?小程序裂变机制有哪些?

做了小程序就等于“生意上门”&#xff1f;其实并不是这样。小程序跟流量平台较为明显的区别就在于小程序并非“自带流量”&#xff0c;而是需要企业利用自己的营销推广能力来建立引流渠道&#xff0c;从而完成用户的拉新和留存、转化。因此&#xff0c;想要用小程序来增加自己…

[虚幻引擎] UE DTBase64 插件说明 使用蓝图对字符串或文件进行Base64加密解密

本插件可以在虚幻引擎中使用蓝图对字符串&#xff0c;字节数组&#xff0c;文件进行Base64的加密和解密。 目录 1. 节点说明 String To Base64 Base64 To String Binary To Base64 Base64 To Binary File To Base64 Base64 To File 2. 案例演示 3. 插件下载 1. 节点说…

自定义element-plus的弹框样式

项目中弹框使用频繁,需要统一样式风格,此组件可以自定义弹框的头部样式和内容 一、文件结构如下: 二、自定义myDialog组件 需求&#xff1a; 1.自定义弹框头部背景样式和文字 2.自定义弹框内容 3.基本业务流程框架 components/myDialog/index.vue完整代码&#xff1a; &…

采用pycharm在虚拟环境使用pyinstaller打包python程序

一年多以前&#xff0c;我写过一篇博客描述了如何虚拟环境打包&#xff0c;这一次有所不同&#xff0c;直接用IDE pycharm构成虚拟环境并运行pyinstaller打包 之前的博文&#xff1a; 虚拟环境venu使用pyinstaller打包python程序_伊玛目的门徒的博客-CSDN博客 第一步&#xf…

山西电力市场日前价格预测【2023-08-12】

日前价格预测 预测明日&#xff08;2023-08-12&#xff09;山西电力市场全天平均日前电价为330.52元/MWh。其中&#xff0c;最高日前电价为387.00元/MWh&#xff0c;预计出现在19: 45。最低日前电价为278.05元/MWh&#xff0c;预计出现在13: 00。 价差方向预测 1&#xff1a; 实…

伯俊ERP对接打通金蝶云星空表头表体组合查询接口与采购订单新增接口

伯俊ERP对接打通金蝶云星空表头表体组合查询接口与采购订单新增接口 数据源平台:伯俊ERP 伯俊科技&#xff0c;依托在企业信息化建设方面的领先技术与实践积累&#xff0c;致力于帮助企业实现全渠道一盘货。伯俊提供数字经营的咨询与系统实施&#xff0c;助力企业信息化升级、加…

vue3使用pinia和pinia-plugin-persist做持久化存储

插件和版本 1、安装依赖 npm i pinia // 安装 pinia npm i pinia-plugin-persist // 安装持久化存储插件2、main.js引入 import App from ./App.vue const app createApp(App)//pinia import { createPinia } from pinia import piniaPersist from pinia-plugin-persist //持…

tomcat多实例与动静分离

实验&#xff1a;在一台虚拟机上配置多台tomcat 1.配置 tomcat 环境变量 vim /etc/profile.d/tomcat.sh source /etc/profile.d/tomcat.sh 2.修改 tomcat2 中的 server.xml 文件&#xff0c;要求各 tomcat 实例配置不能有重复的端口号 vim /usr/local/tomcat/tomcat2/conf/…

CAP理论与MongoDB一致性,可用性的一些思考

正文 大约在五六年前&#xff0c;第一次接触到了当时已经是hot topic的NoSql。不过那个时候学的用的都是mysql&#xff0c;Nosql对于我而言还是新事物&#xff0c;并没有真正使用&#xff0c;只是不明觉厉。但是印象深刻的是这么一张图片&#xff08;后来google到图片来自这里&…

【密码学】密码棒密码

密码棒密码 大约在公元前700年,古希腊军队使用一种叫做scytale的圆木棍来进行保密通信。其使用方法是这样的:把长带子状羊皮纸缠绕在圆木棍上,然后在上面写字;解下羊皮纸后,上面只有杂乱无章的字符,只有再次以同样的方式缠绕到同样粗细的棍子上,才能看出所写的内容。快速且不容…

Git全栈体系(六)

第十章 自建代码托管平台-GitLab 一、GitLab 简介 GitLab 是由 GitLabInc.开发&#xff0c;使用 MIT 许可证的基于网络的 Git 仓库管理工具&#xff0c;且具有 wiki 和 issue 跟踪功能。使用 Git 作为代码管理工具&#xff0c;并在此基础上搭建起来的 web 服务。GitLab 由乌克…

Python-OpenCV中的图像处理-傅里叶变换

Python-OpenCV中的图像处理-傅里叶变换 傅里叶变换Numpy中的傅里叶变换Numpy中的傅里叶逆变换OpenCV中的傅里叶变换OpenCV中的傅里叶逆变换 DFT的性能优化不同滤波算子傅里叶变换对比 傅里叶变换 傅里叶变换经常被用来分析不同滤波器的频率特性。我们可以使用 2D 离散傅里叶变…

使用埋点方式对应用监控

在指标监控的世界里&#xff0c;应用和业务层面的监控有两种典型手段&#xff0c;一种是在应用程序里埋点&#xff0c;另一种是分析日志&#xff0c;从日志中提取指标。埋点的方式性能更好&#xff0c;也更灵活&#xff0c;只是对应用程序有一定侵入性&#xff0c;而分析日志的…

学习笔记|printf函数的实现|不同操作系统中的换行|数的进制:2进制、10进制、16进制转换|STC32G单片机视频开发教程(冲哥)|第五集:C语言基础

文章目录 1.C语言 printf函数的实现Tips&#xff1a;ASCII码表Tips&#xff1a;找不到头文件怎么办&#xff1f;主函数添加程序:常规用法:Tips&#xff1a;不同操作系统中的换行 ⒉数的进制:2进制、10进制、16进制.常见的对应&#xff1a;应用&#xff1a;整体端口的操作 3.C语…