【问题标题】:Restart Eclipse 4 RCP application before it gets visible在 Eclipse 4 RCP 应用程序可见之前重新启动它
【发布时间】:2023-03-28 05:30:01
【问题描述】:

我正在开发一个 Eclipse 4 RCP 应用程序,我需要它在它可见之前执行一些任务,然后重新启动。

我正在运行一个应用程序,它检查 P2 存储库并自动更新/安装/卸载某些插件。我希望这一步对用户是透明的,所以我在“postContextCreate”方法中运行它,使用 LifeCycleURI 属性。

完成此操作后,我需要重新启动应用程序(以便正确加载插件),但我无法在此处注入工作台,因为它尚未创建。如有任何建议或想法,我将不胜感激。

提前致谢!

【问题讨论】:

    标签: eclipse rcp e4


    【解决方案1】:

    您可能最早可以通过事件代理订阅应用程序启动完成事件UIEvents.UILifeCycle.APP_STARTUP_COMPLETE 来获得工作台。但是,直到 UI 显示之后才会触发。

    更新: 事件处理程序类似于:

    private static final class AppStartupCompleteEventHandler implements EventHandler
    {
      private final IEclipseContext _context;
    
      AppStartupCompleteEventHandler(final IEclipseContext context)
      {
        _context = context;
      }
    
      @Override
      public void handleEvent(final Event event)
      {
        IWorkbench workbench = _context.get(IWorkbench.class);
    
        workbench.restart();
      }
    }
    

    在@PostContextCreate 方法中订阅此事件。

    @PostContextCreate
    public void postContextCreate(IEclipseContext context, IEventBroker eventBroker)
    {
      eventBroker.subscribe(UIEvents.UILifeCycle.APP_STARTUP_COMPLETE, new AppStartupCompleteEventHandler(context));
    }
    

    【讨论】:

    • 我怎样才能从那里得到工作台?我无法使用“PlatformUI.getWorkbench()”,因为我运行的是纯 E4 应用程序。我还尝试订阅该事件,使用“new EventHandler() { ... }”并尝试将 IWorkBench 作为字段注入其中,但它为空(因为 EventHandler 是在 WorkBench 之前创建的,我想) .非常感谢!
    • 您将 IEclipseContext 传递给事件处理程序,当事件触发时,上下文将包含 IWorkbench - 添加了我用来测试它的示例。
    猜你喜欢
    • 2018-06-22
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    • 1970-01-01
    相关资源
    最近更新 更多