椰Ye 2023-04-09 21:37 采纳率: 63.2%
浏览 34
已结题

Java聊天室-好友列表更新问题

Java网络编程之简易聊天室
零零散散做了一周,这个问题一直解决不了,实在不知道是哪里出了问题。
package com.company.Client.tools;
import com.company.Client.view.FriendList;
import com.company.Client.view.TalkingView;
import com.company.Shared.Message;

import java.io.ObjectInputStream;
import java.net.Socket;

/**
 * @Title:
 * @Package
 * @Description:客户端连接到服务器线程(对应ConnectThread)
 * @author: Yeeasy
 **/
public class UserThreads extends Thread {

    private Socket socket;
    ObjectInputStream in;

    public UserThreads(Socket socket){
        this.socket=socket;
    }

    public void run() {
        while (true) {

            try {
                //接收ConnectThread来的信息
                in = new ObjectInputStream(socket.getInputStream());
                Message msg = (Message) in.readObject();


                if(msg.getMsgType().equals("onlineSet")){
                    //修改用户列表好友在线状态
                    FriendList friendList=FriendListManage.getFriendList(msg.getUser());
                    System.out.println("进入更新列表");
                        friendList.UpdateFriendList(msg);

                }else if(msg.getMsgType().equals("talk")){

                    System.out.println( msg.getUser()+"说:" + msg.getContent());
                    TalkingView talkingView=TalkingViewManage.getTalkingView(msg.getUser()+" "+msg.getFriend());
                    talkingView.showMessage(msg);

                }


            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    }

    public Socket getSocket() {
        return socket;
    }

}

结果就是 friendList.UpdateFriendList(msg)报空指针
加个!null判断,进入了UpdateFriendList,但是还是不会更新好友列表
下面是源码,可能看起来花点时间,麻烦了

[](链接: https://pan.baidu.com/s/1U9EwsWh5gZQLUonm5WhwHg?pwd=5sgh 提取码: 5sgh 复制这段内容后打开百度网盘手机App,操作更方便哦)

  • 写回答

2条回答 默认 最新

  • Mini厂程序员 2023-04-09 23:58
    关注

    FriendList的构造器有段代码有问题,你不能重新把Friends赋值为new JLabel(5),这样的话会导致每次Friends都会是一个空的数组,所以你里面不会有用户信息,而且你的Friends不是静态的,而你每次登录后都是new FriendList对象,所以每个FriendList对象里面的Friends都是不一样的,你这里要实现在线好友统计的效果必须要用单例才可以。
    再提一句代码规范的问题,方法名和常量名一定要用小写字母开头,不然看着代码很头大,会看成一个类名。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月16日
  • 创建了问题 4月9日

悬赏问题

  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启
  • ¥15 51寻迹小车定点寻迹
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站
  • ¥15 滑块验证码移动速度不一致问题
  • ¥15 Utunbu中vscode下cern root工作台中写的程序root的头文件无法包含