2011-06-08 57 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

更多信息
相关问题