Специальная загрузка JRE с помощью JNLP в 64-битном Internet Explorer - PullRequest
2 голосов
/ 26 октября 2011

Я пытаюсь заставить апплет JWS загружаться правильно.Насколько я понимаю, начиная с JRE 1.6.0_12 , Java Web Start поддерживает 64-разрядную автоматическую установку.

Я использую 64-разрядную версию Windows 7 Enterprise.Я тестирую в Internet Explorer 9 32-разрядную и 64-разрядную версию.Я хочу, чтобы апплет загрузился, и, если не найдена конкретная версия JRE, скачайте и установите ее.

У меня установлена ​​JRE 1.6.0_26 как в 64-битной, так и в 32-битной версии, и она работает додля загрузки апплета.JRE 1.7.0 также установлен.JNLP указывает 1.6.0_21 в качестве требуемого выпуска, поэтому он должен запустить установщик и загрузить эту версию.

В IE-32 все работает правильно, но IE-64 не работает.

Когда язагрузить страницу в IE-64, он запускает апплет установщика JWS, как и положено, но затем я получаю ошибки в консоли апплета.Появляется дополнительное пустое окно 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, в окне ошибки отображается файл JNLP, используемый установщиком JWS:

<?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?

...