Флаг Java Webstart «javaws -open» не работает с несколькими аргументами - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь вызвать Java Webstart, который использует опцию времени выполнения -open для отправки аргументов в приложение webstart.Я ссылался на вопрос: Передача аргументов командной строки исполняемому файлу javaws (Java WebStart) , но этот синтаксис не работает для нескольких аргументов.Похоже, что работает поиск для одного аргумента.

Когда я запускаю "javaws URLtoMyJNLP", он прекрасно запускает приложение, также когда я отправляю один аргумент с помощью "javaws -open arg URLtoMyJNLP", он также, кажется, работаети арг попадает в приложение.Когда я пытаюсь запустить «javaws -open arg arg arg URLtoMyJNLP», он говорит, что предоставлены неверные аргументы.Я ввожу команду в ProcessBuilder.command.

InvalidArgumentException[ Invalid arguments supplied: {hello, jnlp, launch.jnlp, 123 }]

Для вышеприведенного вывода я попытался отправить "javaws -open abc 123 hello launch.jnlp"

Есть идеи?

Код по запросу.Это слишком упрощенно из-за того, что вы PoC.

private static void launchApp(String appName, String appPath, String... args)
{
    logger.debug("Launching application: " + appName);

    Properties props = System.getProperties();
    ArrayList<String> fullCmdString = new ArrayList<String>();

    logger.debug("http://" + System.getProperty("jnlp.serverip") + ":" + System.getProperty("jnlp.serverport") + "/FB2HMI/" + appPath);

    if (args.length > 0)
    {
        fullCmdString.add("javaws");
        fullCmdString.add("-open");
    }
    for (String arg : args)
    {
        fullCmdString.add(arg);
    }

    fullCmdString.add("http://" + System.getProperty("jnlp.serverip") + ":" + System.getProperty("jnlp.serverport") + "/FB2HMI/" + appPath);
    logger.debug("Command = " + fullCmdString);
    ProcessBuilder rmLauncher = new ProcessBuilder().command(fullCmdString.stream().toArray(String[]::new));
    Process p;
    try
    {
        p = rmLauncher.start();

        processList.add(p);
        logProcessOutput(p, logger, null, appName);
    }
    catch (Exception e)
    {
        logger.fatal("Failed to launch " + appName + ": " + e);
        System.exit(1);
    }

}

1 Ответ

0 голосов
/ 10 декабря 2018

Это может быть уродливым ответом, но поскольку не было никаких правильных ответов на этот вопрос, я покажу вам мою работу вокруг.Передайте аргументы как переменные среды в JVM.Это потребует редактирования исходного приложения для поиска переменных среды в качестве альтернативы аргументам, но я обнаружил, что единственный способ обойти эту проблему веб-запуска, который работает даже удаленно.

Map<String, String> saArgs = new HashMap<String, String>();
saArgs.put("jnlp.serverip", System.getProperty("jnlp.serverip"));
saArgs.put("jnlp.serverport", System.getProperty("jnlp.serverport"));
saArgs.put("port", "8887");
saArgs.put("surfaceip", "192.168.0.50");

ProcessBuilder rmLauncher = new ProcessBuilder().command(fullCmdString.stream().toArray(String[]::new));
    Process p;

    for (Map.Entry<String, String> entry : args.entrySet())
    {
        rmLauncher.environment().put(entry.getKey(), entry.getValue());
    }

    try
    {
        p = rmLauncher.start();
     }
    catch (Exception e)
    {
        logger.fatal("Failed to launch " + appName + ": " + e);
        System.exit(1);
    }

Внутри JARприменение:

    logger.debug("jnlp.serverip = " + env.get("jnlp.serverip"));
    logger.debug("jnlp.serverport = " + env.get("jnlp.serverport"));
    logger.debug("port = " + env.get("port"));
    logger.debug("surfaceip = " + env.get("surfaceip"))
...