在64位Internet Explorer中使用JNLP进行特定的JRE自动下载

时间:2011-10-26 19:20:24

标签: java applet 32bit-64bit jnlp java-web-start

我正在尝试正确加载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?

0 个答案:

没有答案