Как зарегистрировать хук жизненного цикла e4 при использовании уровня совместимости? - PullRequest
0 голосов
/ 25 октября 2018

Как зарегистрировать ловушку жизненного цикла при переносе приложения eclipse на 3.7 на e4?

При использовании чистого e4 я бы установил свойство продукта lifeCycleURI, используя точку расширения продукта.Здесь также определяется модель приложения.

У меня сложилось впечатление, что за все это отвечает уровень совместимости, поскольку он использует определение устаревшей модели приложения.Как следствие, я просто не знаю, как использовать мой жизненный цикл.

1 Ответ

0 голосов
/ 25 октября 2018

Вы все еще можете определить класс жизненного цикла, используя lifeCycleURI в определении вашего продукта, при условии, что приложение, которое ваш продукт определяет, вызывает PlatformUI.createAndRunWorkbench.Это запускает код, который имеет дело с жизненным циклом.

Например, в простом тесте RCP.Продукт:

<extension
     id="TestRCPView.product"
     point="org.eclipse.core.runtime.products">
  <product
        application="TestRCPView.application"
        name="TestRCPView">
     <property
           name="lifeCycleURI"
           value="bundleclass://TestRCPView/testrcpview.LifeCycle">
     </property>
  </product>
</extension>

, который имеет lifeCycleURI.

Приложение, к которому он относится:

<extension
     id="TestRCPView.application"
     point="org.eclipse.core.runtime.applications">
  <application>
     <run
           class="testrcpview.Application">
     </run>
  </application>
</extension>

И testrcpview.Application

public class Application implements IApplication
{
  @Override
  public Object start(final IApplicationContext context)
  {
    Display display = PlatformUI.createDisplay();
    try
     {
       int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());
       if (returnCode == PlatformUI.RETURN_RESTART)
         return IApplication.EXIT_RESTART;

        return IApplication.EXIT_OK;
     }
    finally
     {
       display.dispose();
     }
  }


  @Override
  public void stop()
  {
    if (!PlatformUI.isWorkbenchRunning())
      return;

    IWorkbench workbench = PlatformUI.getWorkbench();

    Display display = workbench.getDisplay();

    display.syncExec(new Runnable()
      {
        @Override
        public void run()
        {
          if (!display.isDisposed())
            workbench.close();
        }
      });
  }
}
...