山寨QQ项目窗口处理
?
一 、 各大窗口界面的线程跟踪处理
?
1 列表窗口:在登录界面登录成功后,显示聊天在线好友列表窗口,再启动一个通信模块线程来跟踪该客户。
?
2 聊天窗口:当在好友列表中选择一个好友单聊或进行群聊时,就会出现一个专门与你选择的对象聊天 的窗口(像QQ那样的)为了实现这个步骤,我将该显示该聊天界面的类继承了Runnable,每打开一个聊天窗口,就启动一个小线程来处理在该天界面发生的事件。这样就可以同时单独和几个好友聊天,群聊时,好友也可以群聊窗口里一起聊天。
?
二、Runnable 为非 Thread 子类的类提供了一种激活方式。通过实例化某个 Thread 实例并将自身作为运行目标,就可
以运行实现Runnable 的类而无需创建 Thread 的子类。大多数情况下,如果只想重写 run() 方法,而不重Thread法,那么应使用 Runnable 接口。
?
如果窗体继承Runnable接口,类必须定义一个run()方法。
三、关闭窗口处理
?
1.登录成功后,打开好友列表窗口,关闭登录窗口
?
2.关闭好友列表窗口,该用户下线。这需要给该窗口加窗口监听器WindowListener。
?
此时,利用WindowAdapter,可以省掉不用方法。
?
f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){String s="下线了!";conn.sendMsgAll(user, s,"off");//发生下线消息conn.closeClient();//调用方法,关闭服务器连接对象}});?3.关闭聊天窗口,有两点要注意:
?
(1) 用setDefaultCloseOperation(int i)时,i要为1或2 (个人觉得 2 好一点),
?
i=0:点击关闭窗口,不执行任何操作!
?
i=1:点击关闭窗口,隐藏窗口,不退出程序
?
i=2: 点击关闭窗口,窗口关闭,不退出程序
?
i=3:点击关闭窗口,窗口关闭,退出程序?
?
当点击关闭窗口时,要将窗口关闭或隐藏,同时不能退出程序,如果程序退出,用户就下线了。
?
(2)要给窗口加监听器,当窗口关闭时,将该窗口对应线程做相应处理。
?
? 我个人是将每一个与好友聊天的Runnable线程装入map中的,在此 , 就要将该线程从map?中移除。
?
?