将命令行参数传递给javaws(Java WebStart)可执行文件

12

如果您不想读太多内容,以下是简要概述:

如何实现这个功能: ? 如果我们能够将临时命令行参数传递给 javaws,那么 javaws 应用程序就可以更像“一等公民”、“普通应用程序”。例如,我们可以传递要打开的文件名。

我想知道是否有一种方法可以将“临时”的命令行参数传递给 javaws 可执行文件。我已经知道如何在 JNLP 文件中指定它们:

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

尽管这可以用于我想要完成的目标,但我将其视为一种解决问题的方法。

我尝试过

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

但是,“一些CLI参数”被忽略了,我想。

如果我们可以将即席命令行参数传递给javaws,则javaws应用程序可以更像“一等公民”“普通应用程序”。例如,我们可以传递要打开的文件的文件名。像这样。

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

在JNLP中硬编码参数不能满足这种用例。


我知道,我也可以使用属性:-J-Dexample_property=value但是,通过WebStart启动的应用程序期望命令行参数,而不是属性。 - KarolDepka
我也需要做类似的事情(通过参数指定启动文件),并一直在研究使用JNLP文件、extenstioncomponent-desc来解决问题。但我不确定是否可行。即使可以用javaws [opts] jnlpfile解决问题,你打算如何使用它呢? - posdef
3个回答

6

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

向任何JNLP发送命令行参数非常简单。

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

例如:

c:\>javaws -open arg1 arg2 arg3 c:\myjnlp.jnlp

但是请记住一件事,我们也可以在主方法中将-open作为args[0]获得,因此只需避免使用args[0]即可。而且不可能通过使用带有-前缀的直接参数来避免-open


确认。我已经使用这个工具一年了。感谢您的回复。 - KarolDepka
@KarolDepka,请问您可以帮我回答这个问题吗?- https://stackoverflow.com/questions/48646134/how-to-use-variables-in-jnlp-arguments - thathashd
我可以使用-open开关来传递参数值吗? - thathashd
我似乎无法使它工作。我不确定语法是否不正确。当我输入“javaws myJNLP”时,它运行Java应用程序,而当我使用“javaws -open arg arg arg myJNLP”时,它会说找不到jnlp文件。有人能帮忙吗? - Tacitus86
进一步评论:我发现它适用于单个参数,但似乎不能处理多个参数。有人能够让它处理多个参数吗? - Tacitus86

3

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

因此,您的调用可能会像这样:

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

编辑:上述解决方案仅适用于接受-arg参数的OpenJDK javaws。根据这篇博客文章,另一种选择是使用URL查询字符串参数向JNLP文件传递参数。如果您使用完整的URL执行javaws,则显然只能使用此方法,而如果您将其作为下载链接访问,则无法使用此方法。我没有测试过,因此可能有效也可能无效。


有意思,我正在使用带有IcedTea6的OpenJDK,现在我检查它的javaws支持选项与Sun的JDK附带的javaws非常不同。如果此功能对您很重要,那么您可以升级到OpenJDK。可能这个功能也会出现在Sun的JDK 7中。 - Guss
1
是的,我总是在“then”和“than”之间有问题。这是我的词汇失调方式;-)。据我所知,“-open”和“-print”中的“特殊”(并且愚蠢)形式的参数传递不受OpenJDK的javaws支持,但您始终可以用“-arg -open -arg something-else”来模仿它。此外,“-arg”不会替换jnlp中的参数,而是将其附加到参数中。 - Guss
天哪。看起来,-open 只能带一个参数。这与 http://java.sun.com/javase/6/docs/technotes/tools/share/javaws.html#runoptions 半相反:<br> -open <arguments> 如果指定了,则用 -open <arguments> 替换 jnlp 文件中的参数。 <br> 它说的是 argumentS。 无论如何,当 javaws 打印其使用情况时,-open 和 -print 开关甚至都没有列出来。这从奇怪变成了丑陋,从丑陋变成了邪恶/愚蠢。 - KarolDepka
当它们进入String[] args时,它们不会被分割。这些将出现为"1 2"。对于打开一个文件可能有意义。但是,有些情况下,应用程序一次打开多个文件。或者打开一个文件并指定一个开关/模式。难道这要求太高了吗?或者我必须在空格或其他地方分割args(实际上并不困难,但是Shell应该这样做,例如由于文件名中的空格和转义序列)。 - KarolDepka
你说得没错,但是你受到了javaws CLI的限制。我建议你尝试“查询字符串中的参数”方法,如果这不起作用,那就升级你的javaws。 - Guss
显示剩余7条评论

2

如果你在线上,这个方法不会起作用。我现在使用“-open myarg”并且它适用于我需要的用例。 - KarolDepka
1
您在回答中提到的CodeWriter是什么?您能否详细解释一下如何生成动态JNLP? - Harshdeep

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接