我正在尝试正确加载JWS applet。我的理解是starting with JRE 1.6.0_12,Java Web Start支持64位自动安装。
我正在运行Windows 7 64位企业版。我在Internet Explorer 9中测试了32位和64位。我希望加载applet,如果找不到特定版本的JRE,则下载并安装它。
我在64位和32位安装了JRE 1.6.0_26并在加载applet之前工作。还安装了JRE 1.7.0。 JNLP指定1.6.0_21作为必需的版本,因此它应该启动安装程序并下载该版本。
在IE-32中一切正常,但IE-64失败。
当我在IE-64中加载页面时,它会启动JWS安装程序applet,就像它应该的那样,但后来我在applet控制台中收到错误。将出现一个额外的空白Java窗口(它是一个没有内容的小窗口),并且无法与打开的Java窗口进一步交互。摆脱它们的唯一方法是在任务管理器中找到javaw.exe并终止进程。
使用JRE64 1.7.0时,控制台中的错误是(忽略堆栈跟踪,因为我无法复制它 - 它被冻结):
java.lang.UnsatisfiedLinkError: C:\Users\x\AppData\LocalLow\Sun\Java\
Deployment\cache\6.0\ext\E1314222239880\j2re-installer.dll:
Can't load IA 32-bit .dll on a AMD64-bit platform
<stack trace>
#### Java Web Start Error:
#### null
当禁用JRE64 1.7.0并使用JRE64 1.6.0_26时,错误不同(并且不会冻结):
Could not launch from cache. Will try online mode. [Some of required resources
are not cached.]
java.lang.UnsatisfiedLinkError: C:\Users\x\AppData\LocalLow\Sun\Java\
Deployment\cache\6.0\ext\E1314222239880\j2re-installer.dll:
Can't find dependent libraries
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.load0(Unknown Source)
at java.lang.System.load(Unknown Source)
at com.sun.webstart.installers.Main.install(Main.java:156)
at com.sun.webstart.installers.Main.main(Main.java:554)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.sun.javaws.Launcher.executeApplication(Unknown Source)
at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
at com.sun.javaws.Launcher.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
#### Java Web Start Error:
#### null
单击JWS安装程序的详细信息错误窗口提供JWS安装程序使用的JNLP文件:
<?xml version="1.0" encoding="utf-8"?>
<jnlp codebase="http://javadl.sun.com/webapps/jawsautodl/AutoDL/j2se">
<information>
<title>J2RE 1.6.0_21 Installer</title>
<vendor>Sun Microsystems, Inc.</vendor>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.3+" href="http://java.sun.com/products/autodl/j2se"/>
<jar href="javaws-j2re-inst-w.jar" download="lazy" size="70700"/>
<property name="installerLocation" value="jre-6u21-windows-i586-iftw.exe"/>
<property name="installerSize" value="874272"/>
<property name="javaVersion" value="1.6.0_21"/>
<property name="platformVersion" value="1.6"/>
<property name="msvcrt.versionMS" value="60000"/>
<property name="msvcrt.versionLS" value="20910000"/>
<property name="osplatform" value="windows-i586"/>
</resources>
<installer-desc main-class="com.sun.webstart.installers.Main"/>
</jnlp>
这表明它试图下载Windows i586的目标平台的安装程序,而不是AMD64。在显示堆栈跟踪的Java控制台中,如果我转储系统属性,我会得到以下信息:
os.arch = amd64
os.name = Windows 7
os.version = 6.1
osplatform = windows-i586
platformVersion = 1.6
sun.arch.data.model = 64
sun.cpu.endian = little
sun.cpu.isalist = amd64
sun.desktop = windows
我的JNLP文件是:
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="6.0+" codebase="http://some_host/some_path/"
href="http://some_host/some_path/some_applet.jnlp">
<information>
<title>...</title>
<homepage href="..." />
<description>...</description>
<vendor>...</vendor>
</information>
<security>
<all-permissions />
</security>
<resources>
<java version="1.6.0_21" max-heap-size="512M" java-vm-args="-Xss=256K"/>
<jar href="some_applet.jar" />
</resources>
<applet-desc
name="some_applet"
main-class="com.some_applet.SomeApplet"
width="1152"
height="864"
>
</applet-desc>
</jnlp>
那是什么给出的?有没有办法在32位和64位浏览器中使用它,特别是确保64位IE可以下载特定的64位JRE?