2011-01-05 51 views

回答

2

在SWT中,您只能从显示线程访问GUI资源。例如,在org.eclipse.swt.widgets.Text控制设置文本的时候,你必须已经在显示线程或致电

 

     final Text text = ...; 
     Display.getCurrent().syncExec(new Runnable() { 
      @Override 
      public void run() { 
       text.setText("test"); 
      } 
     }); 
 
+0

最后,我的问题得到了解决。您的解释帮助我找出了解决问题的方法。在编写SWT应用程序时,我们需要注意不访问UI元素并在非UI线程中更新它们。 – VINEEL 2011-01-06 03:19:18

4

当您试图从不是UI线程的线程处接口项目时,会发生这种情况。

要在UI线程上运行代码,您必须使用Runnable并要求显示线程运行它。这种方式:

Display.getDefault().syncExec(new Runnable() { 
    @Override 
    public void run() { 
     // Do your job here 
    } 
}); 

如上所述由syncExec方法的Javadoc,

它调用此方法的线程被挂起,直到可运行完成。

此外,您可能会检查asyncExec方法。

+0

最后,我得到了我的问题Resolved.Your解释帮我找出解决方案对我的问题。 – VINEEL 2011-01-06 03:12:56

+1

然后,请将其标记为有效答案。 – 2011-01-06 13:30:45

相关问题