Флаг Java Webstart "javaws -open" не работает с несколькими аргументами
Я пытаюсь позвонить в Java Webstart, который использует опцию времени выполнения -open для отправки аргументов в приложение webstart. Я ссылался на вопрос: передача аргументов командной строки исполняемому файлу javaws (Java WebStart), но этот синтаксис не работает для нескольких аргументов. Похоже, работа найти для одного аргумента, хотя.
Когда я запускаю "javaws URLtoMyJNLP", он прекрасно запускает приложение, также, когда я посылаю один аргумент с помощью "javaws -open arg URLtoMyJNLP", он также, кажется, работает, и arg попадает в приложение. Когда я пытаюсь запустить "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 ответ
Это может быть уродливым ответом, но поскольку не было никаких правильных ответов на этот вопрос, я покажу вам мою работу вокруг. Передайте аргументы как переменные среды в 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"))