前几天看韩顺平写的qq聊天聊天程序,跟着他的视频打了遍,都过了。但到了多人聊天这块,当发送信息时,明明服务器接收到了,但为什么不能显示?
   他是将每个聊天窗口都放入到hashmap中。定义的haspmap:
public static HashMap<String, ChatFrame> hm = new HashMap<String, ChatFrame>();
其中String为发送者id+接受者id。然后分别add()和get()方法。
假设我的2个用户名分别为1和2.
添加ChatFrame代码如下:
ChatFrame cf = new ChatFrame(this.userName,friendName);
ManageChatFrame.addChatFrame(this.userName+" "+friendName, cf);
接受的ChatFrame代码如下:
ChatFrame cf = ManageChatFrame.getChatFrame(m.getGetter()+" "+m.getSender());
if(cf == null){
System.out.println("cf is null");
}
运行结果为:
cf is null
//userName为sender,friendname为getter。
我将HaspMap的值遍历一遍。发现没有m.getGetter()+" "+m.getSender()对应的ChatFrame.
getGetter():1,getSender():2
name2 1,cftm.view.ChatFrame[frame0,196,255,400x300,invalid,layout=java.awt.BorderLayout,title=2与1聊天中...,resizable,normal,defaultCloseOperation=HIDE_ON_CLOSE,rootPane=javax.swing.JRootPane[,8,30,384x262,layout=javax.swing.JRootPane$RootLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=16777673,maximumSize=,minimumSize=,preferredSize=],rootPaneCheckingEnabled=true]
cf is null
为什么他的可以显示我的不能显示。。各位指点下,谢谢。

解决方案 »

  1.   

    你要打印出:this.userName+" "+friendName和m.getGetter()+" "+m.getSender()两个KEY有什么不同,还有确定是访问的是同一个hashMap
      

  2.   

    我的ManageChatFrame类为:
    public class ManageChatFrame{
    public static HashMap<String, ChatFrame> hm = new HashMap<String, ChatFrame>();

    public static void addChatFrame(String u, ChatFrame cf){
    hm.put(u, cf);
    }

    public static ChatFrame getChatFrame(String u){
    return (ChatFrame)hm.get(u);
    }
    }
    sender和getter放在信息包m里面,分别由userName和friendName赋值的。
    m.setSender(this.userName);
    m.setGetter(this.friendName);
    首先用户1点击他的好友2时将ChatFrame1 2放入到ManageChatFrame,然后用户2点击他的好友1时将ChatFrame2 1放入到ManageChatFrame,此时用户1发送信息给2。信息包m中已有信息,但是ManageChatFrame却没有ChatFrame2 1。不知道为什么。。