3

アプリケーションを閉じる前にMessageDialogを表示するためにIWindowCloseHandlerを実装するにはどうすればよいですか?

これが私のコードです:

編集

public class LifeCycle {    

 @PostContextCreate
 public void postContextCreate()
  {
    // TODO start up code here

     System.out.println("open");

  }

 @ProcessAdditions
  void processAdditions(MApplication app, EModelService modelService)
  {
     WindowCloseHandler closeHandler=new WindowCloseHandler();
    MWindow window = (MWindow)modelService.find("uploadcenter.source.trimmedwindow.0", app);
    window.getContext().set(IWindowCloseHandler.class, closeHandler);
  }
 private static class WindowCloseHandler implements IWindowCloseHandler{

    @Override
    public boolean close(MWindow window) {
        // TODO Auto-generated method stub
        Shell shell = new Shell();

        if (MessageDialog.openConfirm(shell, "Confirmation",
                "Do you want to exit?")) {
            return true;
        }
        return false;
    } 
 }

}

イスマイル

4

2 に答える 2

6

は、制御IWindowCloseHandlerする の Eclipse コンテキスト ( IEclipseContext) に登録されている必要がMWindowあります。

MWindow window = get the window

window.getContext().set(IWindowCloseHandler.class, handler);

クラスでこれを設定したい場合LifeCycleは、ライフサイクルメソッドがアプリケーションの起動の早い段階で呼び出され、コンテキストで値を直接設定できないため、少し作業が必要です。アプリの起動完了イベントを待つ必要があります。

public class LifeCycle
{
  @ProcessAdditions
  public void processAdditions(IEventBroker eventBroker, MApplication app, EModelService modelService)
  {
     MWindow window =(MWindow)modelService.find("uploadcenter.source.trimmedwindow.0", app);

     eventBroker.subscribe(UIEvents.UILifeCycle.APP_STARTUP_COMPLETE, 
                          new AppStartupCompleteEventHandler(window));
  }


  private static class AppStartupCompleteEventHandler implements EventHandler
  {
    private MWindow theWindow;

    AppStartupCompleteEventHandler(MWindow window)
    {
       theWindow = window;
    }


    @Override
    public void handleEvent(final Event event)
    {
      theWindow.getContext().set(IWindowCloseHandler.class, handler);        
    }
  }
}
于 2014-03-04T14:01:28.760 に答える
1

依存性注入と注釈を使用した @ greg-449 の回答のバリエーション。このクラスを Application.e4xmi にアドオンとして登録します。

public class ExampleWindowCloseAddon implements IWindowCloseHandler
{
    @Inject
    @Optional
    public void startupComplete(@UIEventTopic(UIEvents.UILifeCycle.APP_STARTUP_COMPLETE) MApplication application,
            EModelService modelService)
    {
        MWindow window = (MWindow) modelService.find("my.window.id", application);
        window.getContext().set(IWindowCloseHandler.class, this);
    }

    @Override
    public boolean close(MWindow window)
    {
        // Your code goes here
        return true;
    }
}
于 2014-07-22T11:23:04.040 に答える