Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未针对不同参数更新JNLP文件_Java_Java Web Start_Jnlp - Fatal编程技术网

Java 未针对不同参数更新JNLP文件

Java 未针对不同参数更新JNLP文件,java,java-web-start,jnlp,Java,Java Web Start,Jnlp,我在使用JNLP文件时遇到了几个问题。我试图禁止Java缓存JNLP文件,因为每次运行它时,我都会向它传递不同的。。。然而,我似乎无法强迫它使用进行自我更新。我还尝试在http响应头中设置上次修改的属性,但也没有成功 jar保持不变,因此我不能真正使用version属性强制它更新 正确的方法是什么: 禁用JNLP文件缓存 强制它始终更新JNLP文件 每次启动JNLP时正确地传递不同的参数 这是我的JNLP文件,请注意,在从web浏览器启动时可能会有所不同,JNLP文件是从web动态生成的: &l

我在使用JNLP文件时遇到了几个问题。我试图禁止Java缓存JNLP文件,因为每次运行它时,我都会向它传递不同的
。。。然而,我似乎无法强迫它使用
进行自我更新。我还尝试在http响应头中设置上次修改的
属性,但也没有成功

jar保持不变,因此我不能真正使用
version
属性强制它更新

正确的方法是什么:

  • 禁用JNLP文件缓存
  • 强制它始终更新JNLP文件
  • 每次启动JNLP时正确地传递不同的参数
  • 这是我的JNLP文件,请注意,
    在从web浏览器启动时可能会有所不同,JNLP文件是从web动态生成的:

    <jnlp spec="1.0+" codebase="https://blah.blah.com/jnlp/jar/*/">
      <information>
        <title>JNLP Launcher</title>
        <vendor>Blah</vendor>
        <homepage href="http://www.blah.com"/>
        <description>JNLP Launcher</description>
      </information>
      <security>
        <all-permissions/>
      </security>
      <update check="always" policy="always"/>
      <resources>
        <java href="http://java.sun.com/products/autodl/j2se" version="1.7+"/>
        <jar href="https://blah.blah.com/jnlp/jar/LauncherSigned.jar" download="eager" main="true"/>
      </resources>
      <application-desc main-class="com.blah.jnlp.Launcher">
        <argument>{"javawebstart" : "isfullofshit"}</argument>
      </application-desc>
    </jnlp>
    
    
    JNLP发射器
    废话
    JNLP发射器
    {“javawebstart”:“isfullofshit”}
    
    Java web start从不在客户端计算机上更新JNLP文件内容。但是,如果任何资源被更新,它的性能就会完美无瑕

    例如:

    若您对服务器上托管的jnlp文件中的helper.jar资源进行了注释。web start不会将此更改反映到在您更改服务器的.jnlp之前已下载jnlp文件的任何客户端

       <!--jar href="helper.jar"/-->
    
    方法二(简单):

    1.简洁明了。引入一个入口点类,比如“mainclasargument.java”

    2.将.jnlp文件作为主类指向该类

    3.启动主类的实例,从该类将硬编码参数传递给主类

    因此,使用这种方法,您需要在每次更改参数时重新编译该类

    这将欺骗JavaWebStart,使其立即将您的更改反映到客户端

    希望这有帮助:)

    注意:在您提出的问题中,您要求禁用java web start cache,这不会有帮助,因为。jnlp文件未被缓存,它存储在客户端计算机上。JavaWebStart文档从未提到它在客户端更新了.jnlp文件。根据WebStart,更新仅限于资源更新,而没有其他更新。我们必须想出自己的策略来更新client.jnlp文件

    String[] jarSequence= {"demo.jnlp"};
    String codebase = "http://localhost:8818/javawsGame/";
    
    DownloadService ds;
    try {
    ds =
    (DownloadService)ServiceManager.lookup("javax.jnlp.DownloadService");
    
    if (ds != null) {
    
    URL url =
    new URL(codebase + jarSequence[0]);
    boolean cached = ds.isResourceCached(url, null);
    
    if (cached) {
    ds.removeResource(url, null);
    }
    
    //setMessage(msgSequence[0]);
    //setLoadingResource(jarSequence[0]);
    DownloadServiceListener dsl = ds.getDefaultProgressWindow();
    ds.loadResource(url, null, dsl);
    
    }
    //take a breath
    Thread.currentThread().sleep(3000);
    
    Process exec = Runtime.getRuntime().exec("javaws path/to/your/demo.jnlp");
    exec.waitFor();
    System.exit(0);
    
    } catch (Exception e) {
    
    System.out.println("Exception: "+e);
    }