<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Swing


    天行健 君子以自強(qiáng)不息

    posts - 69, comments - 215, trackbacks - 0, articles - 16
       :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    大話swing核心

    Posted on 2008-08-13 22:26 zht 閱讀(1528) 評(píng)論(1)  編輯  收藏 所屬分類: Swing
         首先swing是單線程的,這個(gè)是這篇文章的前提,也是意義所在,當(dāng)swing界面程序啟動(dòng)的時(shí)候,會(huì)啟動(dòng)3個(gè)進(jìn)程,
    1、主線程
    2、系統(tǒng)工具包線程:負(fù)責(zé)捕獲操作系統(tǒng)事件,然后將事件轉(zhuǎn)換成swing的事件,然后發(fā)送到事件派發(fā)線程EDT
    3、事件派發(fā)線程(EDT):將事件派發(fā)到各個(gè)組件,并負(fù)責(zé)調(diào)用繪制方法更新界面

    所有的事件,例如鍵盤,鼠標(biāo)事件,都會(huì)由工具包線程轉(zhuǎn)換成swing事件,然后放到事件隊(duì)列EventQueue中,而這個(gè)EventQueue的派發(fā)機(jī)制是由EDT來(lái)管理的。

    所以任何修改組件狀態(tài)的方法都應(yīng)該在EDT中執(zhí)行,包括構(gòu)造方法。Swing這樣的構(gòu)造原理經(jīng)常會(huì)造成的情況就是,在EDT中執(zhí)行長(zhǎng)時(shí)間的事件,使EDT不能及時(shí)響應(yīng)更新界面的事件,就是所說(shuō)的界面卡住,這種不光是新手就是比較熟練的程序員也會(huì)犯的一個(gè)錯(cuò)誤。所以必須避免在EDT中執(zhí)行長(zhǎng)時(shí)間的操作,而避免的方法就是多線程,啟動(dòng)另外的線程來(lái)處理冗長(zhǎng)的操作,比如操作數(shù)據(jù)庫(kù),讀寫文件等,在這過(guò)程中可能要更新界面來(lái)給用戶以提示,比如顯示一個(gè)進(jìn)度條,過(guò)一段事件更新一下界面,但是在EDT以外的線程中更新界面都是無(wú)效的,這在前面已經(jīng)說(shuō)過(guò),要更新界面就要將對(duì)界面的更新操作放到EDT中,但是事件又是在另外的線程中執(zhí)行的,要解決這個(gè)問(wèn)題就要使用SwingUtilities提供的一個(gè)方法了 invokeLater,
    public void actionPerformed(ActionEvent e){
        new Thread(new Runnable(){
                //do something
                SwingUtilities.invokeLater(new Runnable(){
                    pulic void run(){
                        //update the GUI
                    }    
            });
        }).start;
    }
    這個(gè)方法的作用就是將一個(gè)更新界面的任務(wù)放到EDT中,EDT會(huì)在適當(dāng)?shù)臅r(shí)候進(jìn)行調(diào)用以更新界面。invokeLater負(fù)責(zé)創(chuàng)建一個(gè)含有Runnable的特定事件,并讓其在EDT中排隊(duì)等待調(diào)用,當(dāng)被調(diào)用時(shí)就會(huì)運(yùn)行Runnable中的run方法進(jìn)行派發(fā)。

    主站蜘蛛池模板: 在线观看免费成人| 一二三四视频在线观看中文版免费| 国产亚洲精品国看不卡| 亚洲一区二区三区偷拍女厕| 中文字幕不卡亚洲 | 国产h视频在线观看网站免费| 日韩欧美一区二区三区免费观看| 黄a大片av永久免费| 亚洲欧洲自拍拍偷精品 美利坚| 国产亚洲综合成人91精品 | 亚洲男人的天堂在线va拉文| 国产亚洲成av片在线观看| 久久亚洲精品国产亚洲老地址 | 激情五月亚洲色图| 国产黄在线播放免费观看| 台湾一级毛片永久免费 | 国产成人亚洲综合色影视| 亚洲人成77777在线观看网| 91福利免费网站在线观看| 成人免费看黄20分钟| 亚洲黄色在线观看| 成人免费av一区二区三区| 国产精品无码免费视频二三区| 亚洲成AV人片天堂网无码| 美女扒开尿口给男人爽免费视频| 一级毛片免费观看不卡视频| 亚洲国产a级视频| 亚洲狠狠色丁香婷婷综合| 午夜宅男在线永久免费观看网| 亚洲国产成人一区二区精品区| 一个人看的www免费高清| 免费jjzz在在线播放国产| 午夜亚洲乱码伦小说区69堂| 毛片免费视频播放| 亚洲色精品三区二区一区| 免费看国产成年无码AV片| 亚洲国产成人AV在线播放 | 精品无码国产污污污免费网站 | 亚洲精品成人图区| 免免费国产AAAAA片| 亚洲欧美日韩中文字幕一区二区三区 |