2011-06-08 55 views
0

我有一個eclipse視圖。在視圖內添加了一個表格。現在我使用asyncExec從視圖的run方法調用線程。在使用asyncExec之後調用線程內Eclipse視圖運行方法的問題。無效的線程異常

我的視圖類是像 -

public class SampleViewAction implements IWorkbenchWindowActionDelegate{ 

     Thread t; 

     int Count; 


     @Override 

     public void run(IAction arg0) { 

} 
} 

現在我加了這樣一個話題 -

PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {     

         @Override 

         public void run() { 

           new UDPReadThread(); 



         } 

        }); 

凡UDPReadThread是一類延伸線,其中在UDPReadThread的構造,我開始線程。 但我得到無效的線程異常。

如何解決問題。

回答

1

與AWT和EventDispatchThread類似,SWT必須處理UI線程中的所有內容。

您的SampleViewAction已經在UI線程上運行,以響應菜單或工具選項。

它看起來像你的問題來自然後使用asyncExec(*)將發佈可運行要在UI線程(延遲吧)上運行,並開始從asyncExec Runnable的一個線程。你可以簡單地開始你的線程,並擺脫asyncExec

你的UDPReadThread不是的UI線程。如果您需要從UDPReadThread更新UI組件,這是需要的asyncExec代碼:

display.asyncExec(
    new Runnable() { 
    public void run(){ 
     label.setText(text); 
    } 
}); 

正如順便說一句,除非你真的是延伸的線能力,你不應該繼承Thread。如果你只是想啓動另一個線程的正常模式:

UDPReadRunnable udpRunnable = ....; 
Thread thread = new Thread(udpRunnable); 
thread.start(); 

你可以得到顯示線程從http://www.eclipse.org/swt/faq.php#uithread

更多信息
相關問題