新聞中心
Swing中的線程

成都創(chuàng)新互聯(lián)從2013年開始,公司以成都網(wǎng)站制作、成都做網(wǎng)站、系統(tǒng)開發(fā)、網(wǎng)絡(luò)推廣、文化傳媒、企業(yè)宣傳、平面廣告設(shè)計(jì)等為主要業(yè)務(wù),適用行業(yè)近百種。服務(wù)企業(yè)客戶1000多家,涉及國內(nèi)多個省份客戶。擁有多年網(wǎng)站建設(shè)開發(fā)經(jīng)驗(yàn)。為企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、創(chuàng)意設(shè)計(jì)、宣傳推廣等服務(wù)。 通過專業(yè)的設(shè)計(jì)、獨(dú)特的風(fēng)格,為不同客戶提供各種風(fēng)格的特色服務(wù)。
Swing作為一個完整的UI解決方案,包含了一個GUI程序所擁有的方方面面,當(dāng)然包括作為普通程序也好,作為GUI程序也好,作為Web程序等等程序都共有的線程概念。
Swing中的線程有三種:初始線程,事件線程,工作線程
這三種線程基本上包括了讓一個GUI完美工作的方方面面,首先,初始線程被用來創(chuàng)建GUI組件、資源加載和啟動GUI組件,眾所周知,Swing是事件驅(qū)動的,所以當(dāng)UI出現(xiàn)了之后,初始線程就完成了它的使命,并將接力棒交給了事件線程,Event Dispatch Thread,這個時候所有組件的事件行為都交給了這個線程去處理,當(dāng)然我們自己也要需要用線程來運(yùn)行許多任務(wù),優(yōu)秀的GUI程序是絕不能讓界面被卡死不動的,那會讓用戶崩潰,所以這個時候就需要工作線程了,也可以說是在背后運(yùn)行的線程,這種線程是勞動階級,任勞任怨的執(zhí)行者長時間的工作。
初始線程的寫法很簡單,這樣就可以了:
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- initGUI();
- showGUI();
- }
- }
但是Applet中,你可能需要調(diào)用SwingUtilities.invokeAndWait這個方法,要是init方法返回了,瀏覽器開始展現(xiàn)Applet,但是GUI的創(chuàng)建還在thread中,出錯也是可想而知的。
至于invokeLater和invokeAndWait這兩個線程的簡單點(diǎn)的區(qū)別就是invokeLater是異步的,你不知道它什么時候會開始執(zhí)行,invokeAndWait則是同步的,它會等到動作執(zhí)行完成之后才返回。
Event Dispatch Thread不是線程安全的,所以要用線程來與它打交道要注意了,同步問題總是讓人頭痛。
在1.5之前應(yīng)該說工作線程都是由開發(fā)人員自己去定義的,但是現(xiàn)在Swing推薦了SwingWorker這個類,包括Swing最新的符合JSR標(biāo)準(zhǔn)的Swing AppFramework也使用了SwingWorker這個類來處理所有在GUI背后做的事情。
了解了Swing中的線程定義,能夠讓我們更好的寫出優(yōu)美的基于Swing的GUI程序。
【編輯推薦】
- 不同Swing線程的模型設(shè)計(jì)
- AWT和Swing的可訪問性
- Swing組件也是AWT的一部分
- 淺析iData技術(shù)與Swing關(guān)系
- 命令行輸入改變Swing程序外觀
新聞標(biāo)題:GUI程序與Swing中的線程
分享URL:http://www.dlmjj.cn/article/djdeojh.html


咨詢
建站咨詢
