javaws的命令行参数

时间:2013-09-10 01:57:24

标签: java javafx java-web-start

我想知道如何将运行时参数发送到通过JNLP文件启动的JavaFX应用程序。

JNLP文件摘要:

<jfx:javafx-desc  width="800" height="600" main-class="com.blah.Main"  name="Main" >
  <argument>blah1</argument>
  <argument>blah2</argument>
</javafx-desc>

此代码段将检索args:

List<String> list = this.getParameters().getRaw();
  for (String s : list) {
     System.err.println("args : " + s);
}

如果应用程序启动为:

javaws http://localhost:8080/test/Main.jnlp
javaws Main.jnlp

找到并打印参数,所以这很好。我真的希望能够在启动应用程序时修改params。

根据javaws规范http://docs.oracle.com/javase/7/docs/technotes/tools/share/javaws.html 我应该可以做到:

javaws -open newblah http://localhost:8080/test/Main.jnlp
javaws -open newblah Main.jnlp

这不起作用。显示的争论仍然来自JNLP文件。

我还尝试了“-J”选项为VM提供选项:

javaws -J-Dblah=something http://localhost:8080/test/Main.jnlp
javaws -J-Dblah=something Main.jnlp

并使用以下代码检索参数:

System.getProperty("blah", "noblah");

这适用于“javaws -J-Dblah =某些Main.jnlp”,但不适用于通过URL运行。我猜这是一个安全的问题。我的JNLP已经

<security>
  <all-permissions/>
</security>

我已使用使用此命令创建的自签名密钥对应用程序进行了签名:

keytool -genkey -keyalg RSA -alias selfsigned -keystore selfsigned.jks -storepass XXXXXXX -validity 3600 -keysize 2048

最后,我尝试发送查询参数,例如:

javaws http://localhost:8080/test/Main.jnlp?blah=something

并使用以下代码检索它们:

public static Map<String, String> parseQueryParameters() {

    Map<String, String> params = new HashMap<>();

    String url = app.getHostServices().getDocumentBase().toString();
    System.err.println("url = " + url);

    if (url.indexOf("?") > -1) {
        String parameters = url.substring(url.indexOf("?") + 1);
        StringTokenizer paramGroup = new StringTokenizer(parameters, "&");

        while (paramGroup.hasMoreTokens()) {
            try {
                StringTokenizer value = new StringTokenizer(paramGroup.nextToken(), "=");
                params.put(value.nextToken(), URLDecoder.decode(value.nextToken(), "UTF-8"));
            } catch (UnsupportedEncodingException ex) {
                System.err.println("error");
            }

        }
    }

    return params;
}

但是url字符串的打印行只返回:

url=http://localhost:8080/test/

我真的很想知道为什么我不能得到一些应该直接工作的东西。

0 个答案:

没有答案