我想为用户提供带有自定义启动<argument>标记的动态JNLP。

经过很多麻烦之后,它几乎可以正常工作了。

用户登录该站点,下载为该用户定制的JNLP。 Java Web Start使用下载的定制JNLP文件启动。

但是,第一个用户启动应用程序时,Java Web Start通过使用嵌入在.jnlp文件中的href属性从服务器获取“主” JNLP文件。它不包含用户的自定义<argument>标记,并且出现问题。

有没有办法告诉JNLP使用本地JNLP文件,而不是从服务器获取它?

这是我的APPLICATION_TEMPLATE.jnlp

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE jnlp PUBLIC "-//Sun Microsystems, Inc//DTD JNLP Discriptor 1.5//EN" "http://java.sun.com/dtd/JNLP-1.5.dtd">
<jnlp
        spec="6.0+"
        codebase="http://localhost/jnlp"
        version="1234"
        href="http://localhost/jnlp/app.jnlp">
    <information>
        <title>JNLPHelper</title>
        <vendor>Yoyodyne, Inc.</vendor>
        <offline-allowed/>
        <shortcut online="true" install="false">
            <desktop/>
            <menu submenu="Yoyodyne, Inc."/>
        </shortcut>
        <association extensions="jnlphelper" mime-type="application-x/jnlphelper"/>
    </information>
    <security>
        <all-permissions/>
    </security>
    <update check="timeout" policy="always"/>
    <resources>
        <java initial-heap-size="32M" max-heap-size="256M" version="1.6+"/>
        <!--<j2se version="1.6+" java-vm-args="-esa -Xnoclassgc"/>-->
        <jar href="JNLPHelper.jar"/>
    </resources>

    <application-desc main-class="com.prosc.msi.jnlp.JNLPHelper">
        <argument>*</argument>
    </application-desc>
</jnlp>


此示例文件位于我的Web服务器上,在测试过程中为localhost。用户下载用<argument>foo</argument>替换<argument>*</argument>的自定义JNLP。

我尝试从href标记中完全删除<jnlp>属性。这几乎可以正常工作,但是应用程序每次都提示重新安装自身,并且删除并重新添加了我的桌面图标。

最佳答案

您如何确定用户?您可能会发现这是一个会话问题或类似问题,JNLP href指向的结果竟然是未定制的.jnlp响应。
您可能想要更改确定谁在使用下载内容的方式,或者允许您的app.jnlp URL使用一个参数来确认当前用户是谁?

关于java - 从服务器动态获取JNLP文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19939640/

10-11 14:48