南京网站设计制作公司排名,长春网站建设价格,中国设计网址,广州推广广告好久都没交总结了#xff0c;今天把之前的思路和错误整理了一下#xff1a;
在服务器和客户端两侧#xff0c;不可以同时先初始化获取输入流#xff0c;否则会造成堵塞#xff0c;同时为这位作者大大打call#xff1a;
(3条消息) 关于Java Socket和创建输入输出流的几点…好久都没交总结了今天把之前的思路和错误整理了一下
在服务器和客户端两侧不可以同时先初始化获取输入流否则会造成堵塞同时为这位作者大大打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());// 创建一个后台任务来加载聊天记录数据TaskArrayListMessage getFriendsTask new TaskArrayListMessage() {Overrideprotected ArrayListMessage call() throws Exception {if (tempMessage ! null) {new MessageClientService().insertMessage(tempMessage);}imageAucs1.imageAvar(accountt);return new MessageClientService().initMessagerecord(ManageClientToThread.u.getUserAccount(), selectedFriend.getAccount());}};// 设置任务完成后的处理逻辑getFriendsTask.setOnSucceeded(e - {ArrayListMessage 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或者executeQueryBatch不可以用于查询不可以
关于类静态变量没有过构造器这件事切记切记要用初始化用静态构造块真的要记住
关于正则判断我真的要说五遍表示路径里面的一个单线杠要用四个‘\’(单引号里面的不包括单引号)这里是chat的一点解释主要是靠自己理解QAQ 目前就是这些把自己之前受过的委屈发出来真是太爽了
然后再稍稍励志一下如果这段时间你觉得很疲惫觉得全是坎坷请相信这是老天对你赐福的考验熬过了这段时间接下来全是好运。