Java Webstart“javaws open”标志不适用于多个参数
我试图调用JavaWebStart,它使用“-open”运行时选项向Webstart应用程序发送参数。我引用了以下问题:Passing command line arguments to javaws (Java WebStart) executable,但这种语法似乎不适用于多个参数。不过,对于一个论点来说,这似乎是可行的
当我运行“javaws-URLtoMyJNLP”时,它可以很好地运行应用程序;当我通过“javaws-open arg-URLtoMyJNLP”发送单个参数时,它似乎也可以工作,并且arg可以访问应用程序。当我尝试运行“javaws-openargargarg-arg URLtoMyJNLP”时,它表示提供的参数无效。我将命令输入到ProcessBuilder中。指挥部
InvalidArgumentException[ Invalid arguments supplied: {hello, jnlp, launch.jnlp, 123 }]
对于上面的输出,我尝试发送“javaws-openabc123 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中。这将需要编辑源应用程序以寻找环境变量作为参数的替代方案,但这是解决webstart问题的唯一方法,我发现即使是远程操作也可以
在JAR应用程序中: