SWT - 开放/处置壳 - 全科医生

时间:2012-10-30 20:05:22

标签: java swt dispose jface

我正在寻找处理壳的一般做法。

主应用程序菜单单击执行以下序列

DialogHandler Class =(执行我的应用程序库GUI类)

 @Override 
 public Object execute(final ExecutionEvent event) throws ExecutionException {
  if (dlg == null){
     try {
        AbstractAIFApplication app = AIFDesktop.getActiveDesktop().getCurrentApplication();
        session = (TCSession) app.getSession();
        TCUserService userService = session.getUserService();
        AplotVersion.negotiateVersion(userService);
        AplotQueryCapabilities.initialize(userService);
        shell = HandlerUtil.getActiveWorkbenchWindowChecked(event).getShell();
        dlg = new AplotBaseDialog(shell, session); 
     }
     catch (Exception ex) {
        MessageBox.post(HandlerUtil.getActiveWorkbenchWindowChecked(event).getShell(), ex, true);
     }
  }
  dlg.open();
  return null;
}// end execute()

问题。当我在DialogHandler中打开Dialog时,我是否必须在该类中处理它?<​​/ p>

while(!shell.isDisposed()){
    if(!display.readAndDispatch())
      display.sleep();
  }
  display.dispose();

我的GUI基类AplotBaseDialog =(扩展TitleAreaDialog)

构造函数从DialogHandler类接收Shell。

问题:我是否将While(!shell.isDisposed())代码放在此类中?

我也在AplotBaseDialog类的按钮中打开几个对话框。

 private void showPDFCreateDialog() {
   pdfDialog = new AplotCreatePDFDialog(this, getShell(), session);
   pdfDialog.open();
   pdfDialog.getShell().setSize(700, 400);
 }

问题:我是否必须在每个对话框类中包含dispose代码,或者在关闭按钮代码中是否有一个dispose()足够好?

问题:这是创建和打开对话框的正确方法吗?

问题:现在,我没有在我的应用程序代码中的任何位置设置显示。

Display display = Display.getDefault();

我只是将Shell从父对话框传递给子对话框,并在需要时使用asyncExec。

Display.getDefault().asyncExec(new Runnable() {
  public void run() {
  }
} 

问题:我是否需要在应用程序代码中的某处(!shell.isDisposed())?

1 个答案:

答案 0 :(得分:1)

JFace Dialog为您执行以下功能。除非你想构建自己的对话框而不是扩展JFace Dialog

,否则你不需要做任何事情
//this is for keep reading events from event table
while(!shell.isDisposed()){
        if(!display.readAndDispatch())
          display.sleep();
      }
      display.dispose();