日期:2014-05-20  浏览次数:20786 次

求高手点拨一个“Swing技术的”IM系统的“刷新好友列表”的工程实现方案.
高手,您好:
    我在写一个IM通信的Swing技术的工具,现在我在做好友列表.
    :
    我的好友列表的结构为:
    采用一个JFrame类的子类,显示“总界面”,采用多个JButton类的子类做“触发本界面中的好友分类”的“触点”.
    点击某一个“触点”后,能够让我的系统将我的用户待到“具体用户选择的分类的好友所在的一个JFrame子类所定义的窗口”.这个JFrame子类所定义的相对于“总界面”的好友分类的子窗口中,也排列这用户的十几位好友的“JButton类型的子类”作为用户选择某一位好友进行聊天的“触点”,能够让用户点击后,就可以打开“聊天窗口”与自己的好友聊天.
    
    现在我遇到的问题是:
    无法我的首先登录到系统中的用户的好友列表,在我的之后登录系统的用户登录系统后,能够让我的系统,更新我的C端第一位登录系统地用户的“好友列表”为可用.
    现在,经过我的一番修改后,我的系统能够:
    在我的用户首先登录后,如果该用户不打开具体某一分类的好友的JFrame子窗口,而选择等待.
    这个时间点上,其他的用户如果登陆,并且成功后,这个时间点之后,第一为用户就能够打开好友列表后看到“新登录的用户的JButton按钮为:可用”了.
    但是,如果首先登陆系统的用户在之后的用户登陆之前,若打开了自己的好友列表的JFrame子窗口,(就是“含有大量好友聊天触点”的具体的陈列了用户多位好友的JButton类的子类实例的JFrame子窗口),的话,就会导致:
    “所有的后来的好友”“不论之后再来多少回”,整个界面中,就只有首先来到的好友的JButton按钮的子类所定义的按钮能够可用,之后的好友,能够看到在自己登陆系统之前登陆的好友,但是看不到在自己登陆系统之后登陆系统的好友.
    我处理上述功能的服务器端,是采用了一个“用户登陆验证线程”:一旦看到“是本系统的用户”时,服务器就会向自己的所有好友发出“本用户的用户系统编号”以及“本用户的在线状态”:
    0表示离线.
    1表示在线.
    上述服务器端的代码,我觉得没有问题.
    现在的问题应该是由于C端的“更新好友列表”的代码结构的不足导致了问题的出现.
    我的处理C端更新好友界面的子线程部分代码如下:
    
package c_port_packageBJteacher;
  
public class ManageLocalteacherJButtonOnlineState{
    String LocalMyWorkNum = "";
    int LocalMyOnlineState = 0;
      
    public ManageLocalteacherJButtonOnlineState(String MyWorkNum,String MyOnlineState){
        LocalMyWorkNum = MyWorkNum;
        LocalMyOnlineState = Integer.parseInt(MyOnlineState);
    }
      
    public void start() throws Exception{
        switch(Integer.parseInt(LocalMyWorkNum)){
        //语文教师
        case 0:
        {
            if(LocalMyOnlineState==0){
                Recv.teacheronline[0]=0;
                ChineseTeacher.JB0.setEnabled(false);
                MyUserMainUI.ali1.get(0).al1.get(0).repaint();
            }else{
                Recv.teacheronline[0]=1;
                ChineseTeacher.JB0.setEnabled(true);
                MyUserMainUI.ali1.get(0).al1.get(0).repaint();
            }
            break;
        }
        case 1:
        {
            if(LocalMyOnlineState==0){
                Recv.teacheronline[1]=0;
                ChineseTeacher.JB1.setEnabled(false);
                MyUserMainUI.ali1.get(0).al1.get(0).repaint();
            }else{
                Recv.teacheronline[1]=1;
                ChineseTeacher.JB1.setEnabled(true);
                MyUserMainUI.ali1.get(0).al1.get(0).repaint();
            }
            break;
        }
        case 2:
        {
            if(LocalMyOnlineState==0){
                Recv.teacheronline[2]=0;
                ChineseTeacher.JB2.setEnabled(false);
                MyUserMainUI.ali1.get(0).al1.get(0).repaint();
            }else{
                Recv.teacheronline[2]=1;
                ChineseTeacher.JB2.setEnabled(true);