【问题标题】:Passing command line arguments to javaws (Java WebStart) executable将命令行参数传递给 javaws (Java WebStart) 可执行文件
【发布时间】:2010-11-26 15:43:00
【问题描述】:

给那些可能不想读那么多的人的总结:

我该怎么做:?如果我们可以将 ad-hoc 命令行参数传递给 javaws,那么 javaws 应用程序可能更像“一等公民”“普通应用程序”。例如。我们可以传递要打开的文件的文件名。

我想知道是否有办法将“ad-hoc”命令行参数传递给 javaws 可执行文件。我已经知道如何在 JNLP 文件中指定它们:

<application-desc main-class="org.example.ClassName">
<argument>...

虽然这可以用于我想要完成的任务,但我将其视为一种解决方法。 我试过了

javaws http://example.org/launch.jnlp <some CLI args here>

但我认为“这里的一些 CLI 参数”只是被忽略了。

如果我们可以将 ad-hoc 命令行参数传递给 javaws,那么 javaws 应用程序可能更像“一等公民”“普通应用程序”。例如。我们可以传递要打开的文件的文件名。 比如

javaws [options] http://example.org/launch.jnlp my_file.jpg

在 JNLP 中硬编码参数不满足此用例。

【问题讨论】:

  • 我知道,我也可以使用属性:-J-Dexample_property=value 但是我通过 webstart 启动的应用程序需要命令行参数,而不是属性。
  • 我还需要做一些类似的事情(通过 args 指定启动文件),并且一直在研究使用 JNLP 文件的可能性,更准确地说是extenstioncomponent-desc。但我不确定这是否可能。即使这样可以解决问题,您打算如何使用javaws [opts] jnlpfile

标签: java command-line java-web-start


【解决方案1】:

没有什么好混淆的。我测试的非常直接的答案,它工作完美。

将命令行参数发送到任何 JNLP 都非常简单。

命令提示符> javaws -open space arg1 space arg2 ... space arg n JNLP url

例如:

c:\&gt;javaws -open arg1 arg2 arg3 c:\myjnlp.jnlp

但请记住一件事,我们可以在 main 方法中获得 -open 也为 args[0],因此请避免使用 args[0]。此外,使用前缀为- 的直接参数也无法避免-open

【讨论】:

  • 已确认。我已经用了大约一年了。感谢您的回复。
  • @KarolDepka,你能帮我解决这个问题吗? - stackoverflow.com/questions/48646134/…
  • 我也可以使用 -open 开关将值传递给参数吗?
  • 我似乎无法让它工作。我不确定语法是否不正确,或者当我输入“javaws myJNLP”时它运行java应用程序时,当我使用“javaws -open arg arg myJNLP”时它说它找不到jnlp文件。有人可以帮忙吗?
  • 进一步评论:我发现它适用于单个 arg 但似乎不适用于多个。有没有人让它与多个参数一起工作?
【解决方案2】:

javaws 可执行文件接受一个运行选项-arg &lt;argument&gt;,它允许被调用者向应用程序发送参数。我认为这些都附加到 jnlp 文件中的参数中。

所以您的调用可能如下所示:

javaws [options] -arg my_file.jpg http://example.org/launch.jnlp

编辑: 上述解决方案仅适用于接受 -arg 参数的 OpenJDK 的 javaws。根据this blog post,另一种选择是您可以使用 URL 查询字符串参数将参数传递给 JNLP 文件。这显然只有在您使用完整 URL 执行 javaws 时才有效,并且如果您将其作为下载链接访问则无效。我没有对此进行测试,因此它可能有效,也可能无效。

【讨论】:

  • 嗨。感谢您的回答。这似乎不起作用。 javaws 只打印一般使用信息。我的 javaws 版本是“Java(TM) Web Start 1.6.0_13”。为什么 -arg 选项没有记录在 java.sun.com/javase/6/docs/technotes/tools/share/javaws.html 中?也许你的意思是 -open ?
  • -open 可能会让我满意。但是我需要以一种特殊的方式处理我的应用程序中多余的“-open”参数。奇怪的是,javaws 将“-open”传递给应用程序。
  • 有趣。我将 OpenJDK 与 IcedTea6 一起使用,现在我检查了它支持的 javaws 选项与 Sun 的 JDK 附带的 javaws 非常不同。如果此功能对您很重要,那么也许您可以升级到 OpenJDK。 Sun 的 JDK 7 中也可能包含此功能。
  • 感谢您的澄清。我正在进行大型编程工作,所以我不会很快升级到 OpenJDK。我现在正在使用“-open”arg 并调整我的应用程序以将其从 String args[] 中删除。您的 JDK 版本是否支持“-open”?另外,如果我可以纠正您:“那么不同”->“不同于”,我想。还是这个拼写现在是官方的?
  • 是的,我总是对“then”“than”有疑问。这是我的阅读障碍形式;-)。据我所知,OpenJDK 的 javaws 不支持传入“-open”和“-print”的“特殊”(和愚蠢)形式的参数,但您始终可以使用 -arg -open -arg something-else 来模仿它。此外 -arg 不会替换 jnlp 中的参数,而是附加到它们。
【解决方案3】:

动态生成带参数的webstart jnlp文件。

$ javaws [选项] http://example.org/codewriter/write.jnlp?param1=my_file.jpg

codewriter 捕获查询参数并从参数中写出动态 jnlp

【讨论】:

  • 如果您在线,则无法使用。我现在正在使用 -open myarg 它适用于我需要的用例。
  • 什么是代码编写器,在您的回答中提到。你能解释一下如何生成动态jnlp吗?
猜你喜欢
  • 2013-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-21
  • 1970-01-01
  • 1970-01-01
  • 2018-11-02
相关资源
最近更新 更多