0

シェルを処分するための一般的な方法を探しています。

メインアプリケーションメニュークリック次のシーケンスを実行します

DialogHandler Class =(My Application Base 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クラスからシェルを受け取っています。

質問: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();

親ダイアログから子ダイアログにシェルを渡し、必要に応じて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 に答える