2011-01-06 50 views
1

由于这是SWTException,我使用了syncExec方法,但即使我无法从我的代码中重新解决SWTException问题。请建议。有关SWTException的问题:无效的线程异常| synExec用法失败

public class SampleSwtAction implements IWorkbenchWindowActionDelegate { 
    private IWorkbenchWindow window; 

    public SampleSwtAction() { 
    } 


    public void run(IAction action) { 

    MessageDialog.openInformation(
      window.getShell(), 
      "SampleSwt", 
      "Hello,Run swt application"); 


     window.getShell().getDisplay().syncExec(
        new Runnable() { 
        public void run(){ 
         Display firstDisplay = new Display(); 

         Shell firstShell = new Shell(firstDisplay); 
         firstShell.setText("Sample SWT application"); 
         firstShell.setSize(200,100); 
         firstShell.open(); 
          while (!firstShell.isDisposed()) { 
          if (!firstDisplay.readAndDispatch()) 
           firstDisplay.sleep(); 
         } 
         firstDisplay.dispose(); 
        } 
        }); 



    } 


    public void selectionChanged(IAction action, ISelection selection) { 
    } 


    public void dispose() { 
    } 

    public void init(IWorkbenchWindow window) { 
     this.window = window; 
    } 
} 

回答

0

只是一个猜测,但是你拥有你Runnable中定义新Display 'firstDisplay'。

对于所有正在显示的操作(更新用户界面),您是否还要输入syncExec(Runable)


其实,OP Abhishek Choudhary报道称,他并不需要额外的显示器“firstDisplay”,并执行所有他需要的单syncExec(Runable)内完成,默认Display

+0

所以不可能在单个Runnable条目中提供整套代码 – 2011-01-06 08:20:29

相关问题