0

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

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

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,我是否必须在该类中处理它?

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() {
  }
} 

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

4

1 回答 1

1

JFaceDialog为您执行以下功能。除非您想构建自己的对话框而不是扩展 JFace,否则您不需要做任何事情Dialog

//this is for keep reading events from event table
while(!shell.isDisposed()){
        if(!display.readAndDispatch())
          display.sleep();
      }
      display.dispose();
于 2012-10-31T02:31:00.227 回答