2011-08-20 33 views
0

如何將消息從工作線程傳遞到java中的GUI?我知道在Android中這可以通過處理程序和消息類來實現。但是我想要Java中的同樣的東西,任何人都可以幫助我。 在此先感謝。 Ranganath.tm如何將消息從工作線程傳遞到java中的GUI

+0

哪個GUI庫的含義?它有所作爲。 –

回答

2

我認爲最好的方法是使用EventBus & MVP設計爲您的GUI組件。 「工作線程」通過將事件發送到公共汽車來觸發事件,並且針對特定類型的事件的處理程序的演示者被通知它。

這樣設計的尼斯描述可以在這裏找到: Is there a recommended way to use the Observer pattern in MVP using GWT?

...雖然問題是關於GWT的答案是適用於根據MVP設計的所有應用程序。

3

您必須使用SwingUtilities.invokeLater,因爲Swing組件只能從事件派發線程訪問。

這個方法的javadoc有一個鏈接到關於線程的Swing教程。點擊此鏈接。

下面是一個例子:

public class SwingWithThread { 
    private JLabel label; 

    // ... 

    public void startBackgroundThread() { 
     Runnable r = new Runnable() { 
      @Override 
      public void run() { 
       try { 
        // simulate some background work 
        Thread.sleep(5000L); 
       } 
       catch (InterruptedException e) { 
        // ignore 
       } 

       // update the label IN THE EDT! 
       SwingUtilities.invokeLater(new Runnable() { 
        @Override 
        public void run() { 
         label.setText("Background thread has stopped"); 
        } 
       }); 
      }; 
     }; 

     new Thread(r).start(); 
    } 
} 
1

我們像這樣做對的FrostWire,通過這一實用功能,我們可以檢查是否可運行/線程您正在使用的已從GUI線程調用

/** 
* InvokesLater if not already in the dispatch thread. 
*/ 
public static void safeInvokeLater(Runnable runnable) { 
    if (EventQueue.isDispatchThread()) { 
     runnable.run(); 
    } else { 
     SwingUtilities.invokeLater(runnable); 
    } 
} 
相關問題