0

私はEclipse-rcpプロジェクトに取り組んでいます。ユーザーがウィンドウの右上隅にある x を押したときに呼び出される EventListener (またはそのようなもの) を実装したいと考えています。これをどこで/どのように実装できるか考えていますか?

ありがとうございます!

4

1 に答える 1

2

必要なものに応じて、さまざまな方法があります。ある状況下でメイン シェルを閉じることを禁止したい場合preWindowShellClose()は、WorkbenchWindowAdvisor. http://help.eclipse.org/helios/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fui%2Fapplication%2FWorkbenchWindowAdvisor.html .

メイン ウィンドウが閉じられたときに何らかのアクションを実行するだけの場合は、次のような shutdownHook を追加できます (このスレッドも参照してください: Eclipse RCP アプリケーションにシャットダウン フックを追加する正しい方法は何ですか? ):

    public class IPEApplication implements IApplication {
      public Object start(IApplicationContext context) throws Exception {
        final Display display = PlatformUI.createDisplay();
        Runtime.getRuntime().addShutdownHook(new ShutdownHook());  }
        // start workbench...
      }
    }

private class ShutdownHook extends Thread {
  @Override
  public void run() {
    try {
      final IWorkbench workbench = PlatformUI.getWorkbench();
      final Display display = PlatformUI.getWorkbench()
                                        .getDisplay();
      if (workbench != null && !workbench.isClosing()) {
        display.syncExec(new Runnable() {
          public void run() {
            IWorkbenchWindow [] workbenchWindows = 
                            workbench.getWorkbenchWindows();
            for(int i = 0;i < workbenchWindows.length;i++) {
              IWorkbenchWindow workbenchWindow =
                                        workbenchWindows[i];
              if (workbenchWindow == null) {
                // SIGTERM shutdown code must access
                // workbench using UI thread!!
              } else {


        IWorkbenchPage[] pages = workbenchWindow
                                       .getPages();
            for (int j = 0; j < pages.length; j++) {
              IEditorPart[] dirtyEditors = pages[j]
                                       .getDirtyEditors();
              for (int k = 0; k < dirtyEditors.length; k++) {
                dirtyEditors[k]
                         .doSave(new NullProgressMonitor());
              }
            }
          }
        }
      }
    });
    display.syncExec(new Runnable() {
      public void run() {
        workbench.close();
      }
    });
  }
} catch (IllegalStateException e) {
  // ignore
}

  }
}

お役に立てれば。

于 2013-05-06T17:32:20.870 に答える