我用hashmap存放通信线程//其中hm的key为用户名,value为对应的通信线程,hashmap定义在ManagerClientSocket中
public class ManagerClientSocket {
//用hashmap来存放各个客户端与服务器的连接socket,并用客户名标识这些socket
public static  HashMap<String,SerConClientThread> hm=new HashMap<String,SerConClientThread>();
//存存放线程
public static void addClientSocket(String uid,SerConClientThread sc){
hm.put(uid, sc);
}
         //取得线程
public static SerConClientThread getClientSocket(String uid){
return (SerConClientThread)hm.get(uid);
}

}
然后我在服务器类Server中存进线程,代码如下://SerConClientThread是一个线程类,用于实现客户端与服务器的连接
SerConClientThread scct=new SerConClientThread(s);
ManagerClientSocket.addClientSocket(u.getUsername(), scct);最后我在SerConClientThread中去hm中取值,却总是取得null,代码如下:SerConClientThread sc=ManagerClientSocket.getClientSocket(u.getUsername()); //取线程请教网友,这是哪里出了问题?

解决方案 »

  1.   

    hashMap 是以键值对的方式保存数据是吧  这样get()的话不能取得数据吧 我也是初学者  这样不晓得行不行   通过 Set set=map.keySet();取得键的集合  再便利set集合  
    for(Object o:set)
    {
       String key=(String)o;//获得键
       String value=mpa.get(key);//通过键取得值
    }
    不晓得你做的那个可以根据这个思路做不? 我也只是随便看下你的代码 没深入分析 也是初学者嘛
      

  2.   

    因为2个ManagerClientSocket 不是同一个对象public class ManagerClientSocket {
        //用hashmap来存放各个客户端与服务器的连接socket,并用客户名标识这些socket
        private HashMap<String,SerConClientThread> hm=new HashMap<String,SerConClientThread>();
        //存存放线程
        public void addClientSocket(String uid,SerConClientThread sc){
            hm.put(uid, sc);
        }
             //取得线程
        public SerConClientThread SerConClientThread getClientSocket(String uid){
            return hm.get(uid);
        }
            
    }然后嗲用的时候用new 
    SerConClientThread scct=new SerConClientThread(s);
    ManagerClientSocket m = new ManagerClientSocket()
    m.addClientSocket(u.getUsername(), scct);SerConClientThread sc=m.getClientSocket(u.getUsername()); //取线程
      

  3.   

    我测试了一下,这样get可以取得key值对应的线程...
      

  4.   

    是这样 的,我是在Server类中存放线程的,而取线程是在SerConClientThread类中
      

  5.   

    ManagerClientSocket 这个你可以设置成为一个全局的静态变量,服务器存放 ,客户端获取,保证可以使得取得的对象为有值,只要你存放进去 。