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

介紹Swing線程相關(guān)處理

開發(fā) 后端
本文介紹Swing線程相關(guān)處理,簡(jiǎn)單地在actionPerformed()方法中添加線程,確保監(jiān)聽器在新的線程中執(zhí)行照顧到了整個(gè)線程問題。

我們知道這將在非Swing線程中調(diào)用,因?yàn)樵撌录侵苯釉贚ookupManager中觸發(fā)的,這將不是在Swing線程中執(zhí)行。因?yàn)樗械拇a功能上都是異步的(我們不必等待監(jiān)聽器方法允許結(jié)束后才調(diào)用其它代碼),我們可以通過SwingUtilities.invokeLater()將這些代碼改道到Swing線程。下面是新的方法,傳入一個(gè)匿名Runnable到SwingUtilities.invokeLater():

  1. public void lookupCompleted(final LookupEvent e) {  
  2.  //notice the threading  
  3.  SwingUtilities.invokeLater( new Runnable() {  
  4.   public void run() {  
  5.    outputTA.setText("");  
  6.    String[] results = e.getResults();  
  7.    for (int i = 0; i < results.length; i++) {  
  8.     String result = results[i];  
  9.     outputTA.setText(outputTA.getText() + " " + result);  
  10.    }  
  11.   }  
  12.  }  
  13. );  
  14. }  

如果任何LookupListener不是在Swing線程中執(zhí)行,我們可以在調(diào)用線程中執(zhí)行監(jiān)聽器代碼。作為一個(gè)原則,我們希望所有的監(jiān)聽器都迅速地接到通知。所以,如果你有一個(gè)監(jiān)聽器需要很多時(shí)間來處理自己的功能,你應(yīng)該創(chuàng)建一個(gè)新的線程或者把耗時(shí)代碼放入ThreadPool中等待執(zhí)行。

最后的步驟是讓LookupManager在非Swing線程中執(zhí)行l(wèi)ookup。當(dāng)前,LookupManager是在JButton的 ActionListener的Swing線程中被調(diào)用的?,F(xiàn)在是我們做出決定的時(shí)候,或者我們?cè)贘Button的ActionListener中引入一個(gè)新的線程,或者我們可以保證lookup自己在非Swing線程中執(zhí)行,自己開始一個(gè)新的線程。我選擇盡可能和Swing類貼近地管理Swing線程。這有助于把所有Swing邏輯封裝在一起。如果我們把Swing線程邏輯添加到LookupManager,我們將引入了一層不必要的依賴。并且,對(duì)于 LookupManager在非Swing線程環(huán)境中孵化自己的線程是完全沒有必要的,比如一個(gè)非繪圖的用戶界面,在我們的例子中,就是Logger。產(chǎn)生不必要的新線程將損害到你應(yīng)用的性能,而不是提高性能。LookupManager執(zhí)行的很好,不管Swing線程與否--所以,我喜歡把代碼集中在那兒。

現(xiàn)在我們需要將JButton的ActionListener執(zhí)行l(wèi)ookup的代碼放在一個(gè)非Swing線程中。我們創(chuàng)建一個(gè)匿名的Thread,使用一個(gè)匿名的Runnable執(zhí)行這個(gè)lookup。

  1. private void searchButton_actionPerformed() {  
  2.  new Thread(){  
  3.   public void run() {  
  4.    lookupManager.lookup(searchTF.getText());  
  5.   }  
  6.  }.start();  
  7. }  

這就完成了我們的Swing線程。簡(jiǎn)單地在actionPerformed()方法中添加線程,確保監(jiān)聽器在新的線程中執(zhí)行照顧到了整個(gè)線程問題。注意,我們不用處理像第一個(gè)例子那樣的任何問題。通過把時(shí)間花費(fèi)在定義一個(gè)事件驅(qū)動(dòng)的體系,我們?cè)诤蚐wing線程相關(guān)處理上節(jié)約了更多的時(shí)間。

【編輯推薦】

  1. Swing線程解決方案
  2. 淺析Swing項(xiàng)目的開發(fā)
  3. 全面比較AWT和Swing
  4. 淺談Swing繪畫的處理過程
  5. 概述JSci.swing包的核心
責(zé)任編輯:佚名 來源: 51cto.com
相關(guān)推薦

2010-03-29 13:49:40

Nginx圖片處理

2009-07-10 13:36:32

Swing容器

2009-08-05 18:28:05

C#異常處理

2009-07-10 15:41:27

Swing AWT

2009-07-15 10:37:28

Swing外觀

2009-07-10 18:06:59

JTree Swing

2009-07-16 08:53:03

Swing任務(wù)Swing線程

2009-07-10 16:29:32

Swing組件

2010-03-17 19:24:38

Java多線程循環(huán)

2009-07-17 11:13:46

AWT和SwingSwing組件

2009-07-10 14:41:57

Swing技術(shù)

2009-07-17 14:38:51

輕量級(jí)Swing組件

2009-07-15 10:23:51

Swing SWT集成

2009-07-15 16:03:26

Swing線程

2009-07-15 17:09:32

Swing線程

2009-07-17 15:30:30

JFaceAWT和SWTSwing

2009-07-10 11:45:44

Java Swing

2010-03-18 16:19:02

Java自定義線程池

2009-07-16 11:19:48

外部線程Swing組件

2009-07-16 16:23:59

Swing線程
點(diǎn)贊
收藏

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