日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
淺談SwingWorker的使用

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的版本:

 
 
 
  1. voidmyButton_actionPerformed(ActionEventevt){
  2. newMyQueryTask().execute();
  3. }
  4. publicclassMyQueryTaskextendsSwingWorker{
  5. publicvoiddoInBackground(){
  6. //查詢數(shù)據(jù)庫
  7. finalResultSetresult=...;
  8. //顯示記錄
  9. for(;result.next();){
  10. //往表的Model中添加一行數(shù)據(jù),并更新進(jìn)度條,注意這都是訪問組件
  11. publish(result);
  12. }
  13. ....
  14. }
  15. publicvoidprocess(Object...result){
  16. //往表格中添加數(shù)據(jù)
  17. jTable.add....
  18. //更新進(jìn)度條
  19. jProgress.setValue(....);
  20. }
  21. }

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

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

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)要記住。

如果要了解更詳細(xì)的信息,可以查閱SwingWorker、Swing Timer和util Timer這些類javadoc文檔和其他網(wǎng)上資料。最重要的是要記住了那兩條原則。


本文題目:淺談SwingWorker的使用
分享路徑:http://www.5511xx.com/article/ccooedj.html