整個個程序在運行期間有四個線程終生存在:
MainFrame.run() //系統調度
RMsg.run() //UDP監聽,并分析UDP包,確定來自哪位好友,并調用Friend中的該好友的IcqID.addInMsg()添加信息.
Sender.run() //調用onlineMon()主動與服務器連接后保持連接并接收來自服務器的信息:
(1)轉發的好友信息,
(2)別人要添加自己為好友,
(3)系統消息,
(4)好友上線下線.
SysInfo.run() //當SMsg運行時,每間隔8秒鐘為SMsg.ImagePanel提供廣告圖片和URL.
系統中IcqID也有run()方法,但是它的實例線程不是一直在運行,當有信息發出或收到時才會觸發,當讀了信息后,線程就結束了.
3.特定事件的處理流程:
(1)登錄:
jICQ.main()-->LogonFrame.login()驗證如果通過(jICQ此時處理哪個jICQ服務器正開通著)-->修改jICQ.icqNo-->jICQ初始化MainFrame-->啟動MainFrame線程-->jICQ結束,控制權轉到MainFrame.run()
MainFrame.run()啟動-->確定此機器的UDP接收端口(因此可實現多個jICQ同一臺機運行)-->啟動Sender.onlineMon()線程監聽來自服務器的信息-->讓Sender執行"GETME"命令,同時提交自已的UDP端口號,取得自己的個人資料,把好友名單用toHash()放入Friend中.把在線名單用toID()修改(IcqID)Friend.getFriend(icqNo).isOnline=true-->登錄結束,run()開始無限循環,直到系統結束.
文章來源于領測軟件測試網 http://www.kjueaiud.com/