成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SwingWorker()構(gòu)造器的線程

開發(fā) 后端
本文介紹SwingWorker()構(gòu)造器的線程,SwingWorker是作為一個(gè)Runnable被QueuedExecutor執(zhí)行的。

演示程序用SwingWorker()構(gòu)造器在后臺(tái)執(zhí)行費(fèi)時(shí)的操作,然后更新UI。
這個(gè)演示程序所用的SwingWorker是基于《使用SwingWorker線程》文中提出的SwingWorker類,但重新實(shí)現(xiàn)了它以修正一處競(jìng)態(tài)條件,添加超時(shí)支持,和改進(jìn)了異常處理。
這個(gè)新的實(shí)現(xiàn)還基于DougLea的util.concurrent包的FutureResult類(參見“參考資料”一節(jié))。由于大量依賴了FutureResult所做的工作,SwingWorker類的實(shí)現(xiàn)是簡(jiǎn)單而靈活的。
本節(jié)的余下部分更詳細(xì)地描述了實(shí)現(xiàn)的細(xì)節(jié),請(qǐng)繼續(xù)往下看或直接跳到后面下載源碼。
RunnableFutureResult

FutureResult,正如它的名字所暗示的,它是用來(lái)保持某動(dòng)作的結(jié)果的。它被設(shè)計(jì)成和一個(gè)Callable共同使用,Callable是一個(gè)會(huì)返回結(jié)果的runnable動(dòng)作:

  1. publicinterfaceCallable{  
  2. Objectcall()throwsException;  

新的SwingWorker是一個(gè)RunnableFutureResult。在運(yùn)行時(shí),它把結(jié)果設(shè)成construct()的返回值,然后在事件派發(fā)線程中調(diào)用finished()方法。(注意:SwingWorker是一個(gè)抽象類;你要子類化它并實(shí)現(xiàn)construct()和finished()。)
下面的代碼來(lái)自SwingWorker的run()方法:

  1. Callablefunction=newCallable(){  
  2. publicObjectcall()throwsException{  
  3. returnconstruct();  
  4. }  
  5. }; 

 

  1. RunnabledoFinished=newRunnable(){  
  2. publicvoidrun(){  
  3. finished();  
  4. }  
  5. };  
  6.  
  7. setter(function).run();  
  8. SwingUtilities.invokeLater(doFinished); 

***段把construct()轉(zhuǎn)換成一個(gè)Callable動(dòng)作,第二段把finished()轉(zhuǎn)換成作為Runnable的doFinished。然后setter(function)被運(yùn)行,doFinished被調(diào)用。
setter(function)

上面缺少的部分是setter(function)。它創(chuàng)建一個(gè)刻板的Runnable。在運(yùn)行時(shí),這個(gè)Runnable調(diào)用參數(shù)指定的function,然后給結(jié)果設(shè)置返回值。下面是來(lái)自FutureResult的代碼:

  1. publicRunnablesetter(finalCallablefunction){  
  2. returnnewRunnable(){  
  3. publicvoidrun(){  
  4. try{  
  5. set(function.call());  
  6. }  
  7. catch(Throwableex){  
  8. setException(ex);  
  9. }  
  10. }  
  11. };  

注意try-catch塊所作的防護(hù)。如果construct()拋出任何東西(Exception、Error等等),都會(huì)被捕捉并記錄下來(lái)。
不要搶跑:先construct,再start

調(diào)用start()來(lái)啟動(dòng)worker線程。這是修訂版的SwingWorker和原來(lái)版本的一個(gè)重要區(qū)別。
在原來(lái)的版本中,SwingWorker()構(gòu)造器自動(dòng)啟動(dòng)線程,這種做法帶來(lái)了一個(gè)線程和子類構(gòu)造器競(jìng)爭(zhēng)的危險(xiǎn):當(dāng)SwingWorker()構(gòu)造器已啟動(dòng)了線程,而子類的構(gòu)造器還沒(méi)完成。彌補(bǔ)方法是,先構(gòu)造SwingWorker,然后再調(diào)用start()。
順便一提,RemoteTable并不調(diào)用start()。正確來(lái)說(shuō),SwingWorker是作為一個(gè)Runnable被QueuedExecutor執(zhí)行的。

【編輯推薦】

  1. 介紹JavaFX功能與Swing的關(guān)系
  2. 淺談Swing中l(wèi)ookandfeel源代碼
  3. 概述Swing中的Timer對(duì)象
  4. 淺析Swing中actionPerformed()方法
  5. 詳解所有的Swing核心組件
責(zé)任編輯:佚名 來(lái)源: cnblogs
相關(guān)推薦

2009-07-10 09:05:20

SwingWorker

2009-07-17 10:58:12

SwingWorker

2009-07-10 09:30:41

SwingWorker

2009-07-17 17:47:39

SwingWorker

2009-07-17 17:34:03

SwingWorker異常處理

2009-07-21 12:35:00

Scala從構(gòu)造器

2009-10-12 13:32:58

VB.NET線程構(gòu)造器

2009-07-17 14:57:41

SwingWorkerSwing程序

2012-05-16 13:45:24

Java構(gòu)造器

2011-05-16 10:35:02

jQuery

2019-10-22 08:45:07

Java構(gòu)造器編程語(yǔ)言

2017-04-17 08:44:43

構(gòu)造函數(shù)線程安全

2009-04-30 09:10:42

JavaSwing線程安全

2012-02-27 14:09:00

Java

2022-04-15 08:30:00

Lombok@Builde構(gòu)建器

2025-02-11 08:31:37

Java關(guān)鍵字安全

2010-01-18 10:28:15

C++編譯器

2009-12-17 10:18:17

Ruby創(chuàng)建構(gòu)造器

2013-05-06 09:59:48

2025-02-06 13:23:09

C++函數(shù)參數(shù)
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 神马久久春色视频 | 99re国产视频 | 精品国产一区二区国模嫣然 | 久热免费在线 | 久久成人国产 | 午夜影视 | 看黄在线 | 亚洲视频一区在线观看 | 欧美成人一区二区 | 久久se精品一区精品二区 | 国产高清视频在线观看 | 中文字幕蜜臀av | 国产一区欧美 | 久久久久久国产精品 | 五月天婷婷综合 | 99久久久国产精品免费消防器 | 日本亚洲一区二区 | 亚洲va欧美va天堂v国产综合 | 国产一级一级毛片 | 成人中文字幕在线观看 | 日韩美香港a一级毛片免费 国产综合av | 精品视频一区二区三区在线观看 | 国产高清在线精品 | 国产在视频一区二区三区吞精 | 91视频大全 | 欧美黄色片 | 久久久久久久久久久久久久久久久久久久 | 久久久久久国产精品久久 | 欧洲一区二区视频 | 中文字幕av在线 | 国产高潮好爽受不了了夜夜做 | 99视频在线免费观看 | 国产精品资源在线 | 久久精品国产一区二区电影 | 国产中文 | 一区二区三区av夏目彩春 | 免费在线观看黄色av | 福利片在线观看 | 91免费福利在线 | 久久精品欧美一区二区三区不卡 | 性色视频 |