SwingWorker怎么用

這篇文章將為大家詳細(xì)講解有關(guān)SwingWorker怎么用,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

創(chuàng)新互聯(lián)建站長期為數(shù)千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為金平企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站,金平網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

JDK1.6以后,Swing提供了一個(gè)專門的類SwingWorker能幫你解決這個(gè)編程范式,你所需要做的就是繼承這個(gè)類,重載doInBackground,然后在actionPeformed中調(diào)用它的execute方法,并通過publish/process方法來更新界面。

SwingWorker實(shí)際上不過是封裝了前面我所說的例子中的MyQueryTask,并做了更詳盡的考慮。execute方法相當(dāng)于MyQueryTask線程start,它啟動(dòng)這個(gè)后臺(tái)線程并立刻返回。SwingWorker 可以注冊PropertyChangeListener,這些listener都被在事件調(diào)度線程上執(zhí)行,相當(dāng)于MyQueryTask中的那些訪問組件的Runnable對象。另外,publish、setProgress只不過是特殊的property事件吧,process和done不過是響應(yīng) publish和PropertyChangeEvent.DONE這個(gè)事件的方法罷了。因此我們很容易將上面的例子改成SwingWorker的版本:

voidmyButton_actionPerformed(ActionEventevt){  newMyQueryTask().execute();  }   publicclassMyQueryTaskextendsSwingWorker{  publicvoiddoInBackground(){  //查詢數(shù)據(jù)庫  finalResultSetresult=...;  //顯示記錄  for(;result.next();){  //往表的Model中添加一行數(shù)據(jù),并更新進(jìn)度條,注意這都是訪問組件  publish(result);  }  ....  }  publicvoidprocess(Object...result){  //往表格中添加數(shù)據(jù)  jTable.add....  //更新進(jìn)度條  jProgress.setValue(....);  }  }

對于一般的耗時(shí)任務(wù)這樣做是比較普遍的,但是有一些任務(wù)是一旦觸發(fā)之后,會(huì)周期性的觸發(fā),如何做處理這種任務(wù)呢?JDK中提供了兩個(gè)Timer類幫你完成定時(shí)任務(wù),一個(gè)是javax.swing.Timer,一個(gè)java.util.Timer。使用它們的方法很簡單,對于Swing的timer,使用方法如下:

publicvoidmyActionPerformed(){  //假設(shè)點(diǎn)擊了某個(gè)按鈕開始記時(shí)  ActionmyAction=newAbstractAction(){  publicvoidactionPerformed(ActionEvente){  //做周期性的活動(dòng),比如顯示當(dāng)前時(shí)間  Datedate=newDate();  jMyDate.setDate(date);//jMyDate是個(gè)假想的組件,能顯示日期時(shí)間  }  };  newTimer(1000,myAction).start();  }

java.util.Timer類似,只不過使用TimerTask完成動(dòng)作封裝。注意這兩個(gè)Timer有一個(gè)關(guān)鍵的區(qū)別:Swing的Timer的事件處理都是在事件調(diào)度線程上進(jìn)行的,因而它里面的操作可以直接訪問Swing組件。而java.util.Timer則可能在其他線程上,因而訪問組件時(shí)要使用SwingUtilities.invokeLater和invokeAndWait來進(jìn)行。這一點(diǎn)要記住。

關(guān)于“SwingWorker怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請把它分享出去讓更多的人看到。

分享文章:SwingWorker怎么用
轉(zhuǎn)載注明:http://muchs.cn/article36/jcpgsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google網(wǎng)站改版、電子商務(wù)、網(wǎng)站設(shè)計(jì)公司、營銷型網(wǎng)站建設(shè)、用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)