繁体   English   中英

JNLP下载期间的FileNotFoundException

[英]FileNotFoundException during JNLP download

我几个星期以来一直在寻找这个问题的解决方案,但没有找到任何与我的问题真正相关的内容/或者我已经尝试了所有建议的解决方案,但没有任何成功。

我有一个JNLP文件,由javaws正确下载(我认为),但在启动之前,它抱怨没有在/ tmp目录中找到一些文件。 确切的错误消息是:

CouldNotLoadArgumentException[ Could not load file/URL specified: /tmp/tmp_cache8259898691262575141.tmp]
at com.sun.javaws.Main.launchApp(Unknown Source)
at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
at com.sun.javaws.Main.access$000(Unknown Source)
at com.sun.javaws.Main$1.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.FileNotFoundException: /tmp/tmp_cache8259898691262575141.tmp (Nincs ilyen fájl vagy könyvtár)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(FileInputStream.java:195)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at java.io.FileInputStream.<init>(FileInputStream.java:93)
    at com.sun.javaws.jnl.LaunchDescFactory.buildDescriptor(Unknown Source)
    ... 5 more

我检查了/tmp ,文件夹当然在那里,并且是可写的。 有趣的是,在下载期间, tmp_cacheNNNNNN.tmp文件就在那里! 随着下载进度的继续,它们逐个出现。 然而,当下载完成时( javaws ?)删除所有这些,然后开始抱怨错过它们。

我打开了JNLP缓存(并打算在本地缓存它)。 我试图与JRE 1.8.0_401.8.0_651.8.0_66 ,都给出了相同的结果。 Windows和Linux上的结果相同,都抱怨temp文件夹中缺少文件。 我设法启动的最后一个JRE是1.8.0_25 ,并且似乎与1.8.0_72 (beta)一起使用。 但是下载的jar文件仍未缓存! (如果我打开jcontrol应用程序并查看缓存,JAR文件不在那里,我也不知道为什么)。

我的JNLP看起来像这样:

<?xml version="1.0" encoding="utf-8"?>

<jnlp spec="7.0+"
      codebase="http://localhost:8080/jbaf-server/jnlp/swing-client"
      href="http://localhost:8080/jbaf-server/clientDownload/client.jnlp" >
    <information>
        <title>Swing Client</title>
        <vendor>www.xy.z</vendor>
        <description>Swing Client</description>
        <description kind="short">Swing Client</description>
        <homepage href="www.xy.z"></homepage>

        <icon href="images/jnlp-icon.png"/>
        <icon kind="splash" href="images/jnlp-splash.png"/>

        <offline-allowed/>

    </information>
    <security>
        <all-permissions/>
    </security>
    <resources>
        <j2se version="1.8+" initial-heap-size="256m" max-heap-size="1024m"/>


    <property name="jnlp.versionEnabled" value="true" />
    <jar href="jbaf-swing-client.jar" version="0.3.0" main="true"/>
.... (lots of jar files)
    <jar href="spring-expression.jar" version="4.2.3.RELEASE"/>
    <jar href="spring-tx.jar" version="4.2.3.RELEASE"/>
    <jar href="commons-codec.jar" version="1.10"/>


    </resources>
    <application-desc main-class="org.jbaf.swingclient.Main">
        <argument>http://localhost:8080/jbaf-server</argument>
        <argument>false</argument>
    </application-desc>
</jnlp>

JAR使用自签名证书签名。

我不知道为什么会这样。 有人遇到过这样的问题吗?

最后我设法找到了问题!

它是由Tomcat设置的以下HTTP标头引起的:

没有在我的Servlet设置这些标题,但似乎这些被一些过滤器的添加先前。 我将这些标头值设置为"" (空字符串),JDK开始缓存我的文件,最终启动应用程序确定!

但是,如果将Cache-Control设置为no-cache ,则JDK 无法启动应用程序。 这些文件将保存到System / User临时目录中,但之后将无法启动,因为临时文件已被删除。 这只适用于JDK 1.8.0_72(BETA),所有以前的版本都失败了!

简而言之:如果您的JNLP出现问题,而WebStart告诉您不在temp目录中找到文件,请检查您的HTTP响应标头!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM