2

我有一个在 3.x 中启动的 RCP 应用程序,现在我已经完成了到 4.x 的软迁移。

我需要为最终用户添加命令行参数选项,例如 -version、-help 等。所以当用户myApp -version在控制台中键入时,它不会启动应用程序,只显示版本号。

谢谢!

我在我的应用程序课上试过这个,

public Object start(IApplicationContext context) throws Exception {
        String[] args = Platform.getCommandLineArgs();
        int i = 0;
        while (i < args.length)
        {
            if (args[i].equals("-v"))
            {
                System.out.println("Version ABC");
                return IApplication.EXIT_OK;
            }
            i++;
        }

        Display display = PlatformUI.createDisplay();
        try {
            int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());
            if (returnCode == PlatformUI.RETURN_RESTART)
                return IApplication.EXIT_RESTART;
            else
                return IApplication.EXIT_OK;
        } finally {
            display.dispose();
        }

    }

它不会启动 UI,但会启动启动画面。有没有一种方法可以getCommandLineArgs()在启动画面开始之前放置?

SplashHandler 尝试:我尝试绑定自己的 SplashHandler,但遇到了同样的问题。当我到达 SplashHandler 的 init 方法时,带有初始图像的 shell 已经显示出来,我认为这个 shell 是在我的任何类可以进行更改之前创建的。

4

2 回答 2

1

在说明 Java VM之前,启动器(典型的 eclipse.exe 或类似程序)会显示启动画面。初始屏幕根据条目显示osgi.splashPath=platform\:/base/plugins/...显示configuration/config.ini

你唯一的出路是

  1. config.ini
  2. 显示你自己的启动画面IApplication.start(...)

请注意,与今天相比,启动屏幕会“延迟”,并且SplashHandler不会自动实例化和调用(尽管您可以自己做)。

于 2013-04-26T08:18:04.370 回答
1

我还没有查看 4.x 文档,但是您可以在 GUI 启动之前使用 IApplication 中的start方法来处理这个问题。

然后在应用程序实际启动之前做这样的事情......

Map args = context.getArguments();

String[] parms_ = (String[]) args.get("application.args");
List parms = Arrays.asList(parms_);

if (parms.contains("-version")) {
    System.out.println("version found");
    return IApplication.EXIT_OK;
}
于 2013-04-25T15:40:53.740 回答