1.客户端的界面交互问题,使用FXML文件,进行布局,更新。
今天写了一个更换头像的问题,采用一发一收的方式,不断进行方法的调用,这样就会有个最大的问题,我不同之间的控件,不断调用,然后调用过去调用过来,就会出错,并且最大的问题,就是我在这个这个布局类中更新了数据,然后用户的信息可以得到更新,但是我的布局最初已经搞好了,信息似乎是改不了,我再次调用实体类中的方法,导致最后程序出问题,找不到问题所在,这个最头疼采用一发一收,返回信息太乱,FXML文件的相互调用,更加乱,今天就是不断地的再改。
现在 客户端采用单开一个线程,进行处理服务端发过来的请求,并再开一个主控制类,在切换场景时,不断给主控制类中的静态变量进行赋值,找到实例对象。
客户端在多开的那个线程中进行针对请求,对不同实例对象的UI界面进行更新(通过调用实体中的方法)及时更新数据。
。
2.在主控制类中储存不同组件之间的实体类(这里注意的就是切换场景时,要进行,对实体类重新赋值。)
3.登录之后进行多开一个线程,进行专门监听服务端的请求
针对请求类型不断做出反应,对实体类进行处理。后面的思路更加清晰
4.上传文件的封装类,
以后进行传输文件就可以通过这个进行传输,直接调用类中的写入文件和写出文件,就可以对简单的传输文件了。
package com.test.po;
import java.io.*;
public class MyFile implements Serializable {
private String name;
private byte[] fileData;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public byte[] getFileData() {
return fileData;
}
public void setFileData(byte[] fileData) {
this.fileData = fileData;
}
public MyFile(String name) {
this.name = name;
}
public MyFile() {
}
public Integer readFileData(File file) {
if (!file.isFile()) return 0;
try {
FileInputStream fileInputStream = new FileInputStream(file);
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
byte[] temp = new byte[1024 * 1024]; // 1MB
int len;
while ((len = fileInputStream.read(temp)) != -1) {
buffer.write(temp, 0, len);
}
fileInputStream.close();
this.fileData = buffer.toByteArray(); // 将 ByteArrayOutputStream 转换为 byte[]
} catch (Exception e) {
e.printStackTrace();
System.out.println("文件读取错误");
return 0;
}
return 1;
}
public Integer writeFileData(File file) {
if (fileData == null) return 0;
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
System.out.println("文件创建错误");
return 0;
}
}
try {
FileOutputStream fileOutputStream = new FileOutputStream(file);
fileOutputStream.write(fileData); // 直接写入 byte[] 数组
fileOutputStream.flush();
fileOutputStream.close();
} catch (Exception e) {
System.out.println("文件写入错误");
e.printStackTrace();
return 0;
}
return 1;
}
}