【发布时间】:2019-05-09 11:14:01
【问题描述】:
我正在尝试调用使用“-open”运行时选项向 webstart 应用程序发送参数的 Java Webstart。我已经引用了这个问题:Passing command line arguments to javaws (Java WebStart) executable,但这种语法似乎不适用于多个参数。不过,它似乎适用于单个参数。
当我运行“javaws URLtoMyJNLP”时,它可以正常运行应用程序,当我通过“javaws -open arg URLtoMyJNLP”发送单个参数时,它似乎也可以工作,并且 arg 会到达应用程序。当我尝试运行“javaws -open 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);
}
}
【问题讨论】:
-
编辑您的问题并显示进行调用的 Java 代码。我怀疑您通过传递单个
"javaws -open "字符串而不是单独的"javaws", "-open"字符串参数来滥用 Runtime.exec 或 ProcessBuilder。 -
@VGR 当然。我更新了它。谢谢。
-
@VGR 我更新了代码并尝试了您的建议并得到了这个异常。显然,第一项是 JNLP 文件路径,不应作为参数。 InvalidArgumentException[ 提供的参数无效:{192.168.0.50:8080/FB2HMI/SystemApp.jnlp, 192.168.0.50 }]。我将端口号和源 IP 地址作为参数传递,然后是 JNLP 文件 URL。
-
其实看了the official documentation之后,我也不确定。它确实说它需要“参数”,所以我不确定正确的用法是什么。
-
@ryvantage 我知道。我们将在未来用 HTML5/Javascript 重新设计这个应用程序,但现在需要一个临时的 webstart 解决方案。
标签: java java-web-start java-ws