java-JNLP下载期间FileNotFoundException
作者:互联网
数周以来,我一直在寻找解决该问题的方法,但是没有发现任何与我的问题真正相关的东西,或者我已经尝试了所有建议的解决方法,但均未成功.
我有一个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_40,1.8.0_65,1.8.0_66,它们都给出相同的结果.在Windows和Linux上结果相同,都抱怨temp文件夹中缺少文件.
我设法启动的最后一个JRE是1.8.0_25,似乎可以与1.8.0_72(测试版)一起使用.但是,下载的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标头引起的:
> Cache-Control
> Pragma
> Expires
我没有在Servlet中设置这些标头,但似乎这些标头是以前由某些过滤器添加的.我将这些标头值设置为“”(空字符串),JDK开始缓存我的文件,并且应用程序终于启动了!
但是,如果将Cache-Control设置为no-cache,则JDK仍然无法启动应用程序.这些文件将保存到“系统/用户”临时目录中,但之后将无法启动,因为已删除了这些临时文件.这仅适用于JDK 1.8.0_72(BETA),所有以前的版本均失败!
长话短说:如果您的JNLP出现问题,WebStart会告诉您在temp目录中找不到文件,请检查HTTP响应标头!
标签:jnlp,java-web-start,java 来源: https://codeday.me/bug/20191119/2033946.html