自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

淺談SwingWorker的使用

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

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

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

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

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

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

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

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

【編輯推薦】

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

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

2011-05-26 09:20:59

配線架

2013-12-26 16:55:56

manman命令

2009-09-10 15:45:07

Linq使用Selec

2009-09-28 13:43:28

使用Hibernate

2009-06-12 11:36:42

Netbeans插件DTrace GUI

2010-08-03 15:40:30

NFS文件格式

2009-06-22 10:34:43

Boost庫lambda

2009-09-22 13:41:10

直接使用Hiberna

2009-07-15 09:42:56

MyEclipse使用

2009-06-26 10:48:45

職責鏈模式.NET

2009-04-07 13:56:03

SQL Server觸發(fā)器實例

2009-07-14 16:16:04

JDBC update

2009-07-23 15:44:39

ASP.NET MVC
點贊
收藏

51CTO技術棧公眾號