我正在尝试使用Java Web Start替换Java小程序,但每次我直接从Web服务器或直接从我的计算机运行.jnlp文件时,它都会给我一个错误 .
我看到Java Web Start初始屏幕,然后出现默认进度条 . 它下载,然后验证我的jar,但不久之后出现以下错误消息“无法启动应用程序” .
CouldNotLoadArgumentException[ Could not load file/URL specified: C:\Users\[username]\AppData\Local\Temp\tmp_cache9015150161909242571.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(Unknown Source)
Caused by: java.io.FileNotFoundException: C:\Users\[username]\AppData\Local\Temp\tmp_cache9015150161909242571.tmp (The system cannot find the file specified)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at com.sun.javaws.jnl.LaunchDescFactory.buildDescriptor(Unknown Source)
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(Unknown Source)
我在Temp文件夹中看不到任何类似于tmp_cache的文件 .
这是我的JNLP文件:
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+"
codebase="http://localhost:2020/MyServer/applets"
href="basicTest.jnlp">
<information>
<title>JWS Test</title>
<vendor>My Company</vendor>
</information>
<resources>
<j2se version="1.7+"
href="http://java.sun.com/products/autodl/j2se"/>
<jar href="basicTest.jar" main="true" />
</resources>
<application-desc
name="Test Name"
main-class="main.Entry">
</application-desc>
<update check="background"/>
</jnlp>
我试过的事情:
-
从我的Web服务器下载JNLP文件和JAR(按预期工作)
-
使用一个全新的,简单的jar,只有一个main方法和一个System.out.print()语句(相同的结果)
-
更改.jnlp文件中的href(不同的错误消息,无法找到.jar,正如预期的那样 . 我的服务器日志正确显示为404)
-
更改main-class属性的值(相同结果,表明JVM永远不会启动)
-
从Sun运行其他example apps(这些工作正常,无论是在浏览器中运行还是在运行下载的.jnlp文件时)
-
清除我的java缓存和临时文件(结果相同)
我确实想知道没有完全签名的 jar 是否重要(我的 jar 在开发过程中目前是自签名的)但在这种情况下我会期待一个不同的错误 .
似乎jar文件被下载到一个位置并进行验证,但是当JVM尝试启动它时无法找到 . 可能存在缓存位置冲突吗?
1 回答
其中一个原因可能是JRE 7起安全性很高 . 需要签名 jar .