8.3,8.4总结
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);ObjectOutputStream oos=new ObjectOutputStream(serverConnectClientThread.getSocket().getOutputStream());oos.writeObject(message);//转发,如果客户不在线,可以保存到数据库,这样可以实现离线留言Message message1=new Message();message1=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()) {//发送过去//*****************************************************}} 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 {//清空好友列表的//*****************代码*****************//好友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.展示好友/我的资料
a.左边我的
b.右边好友的
5.聊天记录的建表
表名:chat_records
字段:Sender_id 发送者,Getter_id 接受者,SendTime发送时间,Message_type消息类型,
MessageContent 消息内容
6.聊天列表的刷新
a.这是与黄头的聊天
b.点击绿头时,这是绿头的聊天