偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

淺談SwingWorker的使用

開(kāi)發(fā) 后端
本文介紹SwingWorker能幫你解決這個(gè)編程范式,你所需要做的就是繼承這個(gè)類,重載doInBackground,然后在actionPeformed中調(diào)用它的execute方法,并通過(guò)publish/process方法來(lái)更新界面。

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

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

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

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

  1. publicvoidmyActionPerformed(){  
  2. //假設(shè)點(diǎn)擊了某個(gè)按鈕開(kāi)始記時(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();  

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

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

【編輯推薦】

  1. 概述Swing窗體的種類
  2. 淺談Swing線程三種
  3. Swing全屏幕模式
  4. 淺析Swing線程中的LookupEvent
  5. Swing文件選擇器的制作
責(zé)任編輯:佚名 來(lái)源: 百度空間
相關(guān)推薦

2009-07-10 09:30:41

SwingWorker

2009-07-17 17:47:39

SwingWorker

2009-07-17 17:41:41

SwingWorker

2009-07-17 17:34:03

SwingWorker異常處理

2009-07-10 09:05:20

SwingWorker

2009-07-17 14:57:41

SwingWorkerSwing程序

2009-06-08 17:59:00

HibernateTemplate

2013-12-26 16:55:56

manman命令

2011-05-26 09:20:59

配線架

2009-09-28 13:43:28

使用Hibernate

2009-09-10 15:45:07

Linq使用Selec

2009-06-22 10:34:43

Boost庫(kù)lambda

2010-08-03 15:40:30

NFS文件格式

2009-06-12 11:36:42

Netbeans插件DTrace GUI

2009-09-22 13:41:10

直接使用Hiberna

2009-07-15 09:42:56

MyEclipse使用

2009-06-26 10:48:45

職責(zé)鏈模式.NET

2009-04-07 13:56:03

SQL Server觸發(fā)器實(shí)例

2009-07-14 16:16:04

JDBC update

2011-06-15 10:08:01

Qt CVS
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)