我們的客戶部分並行安裝了JRE x86和x64。默認情況下,JNLP在Windows上啓動,位於HKEY Classes Root JNLPFile中。但是,這顯示了x86或x64路徑。使用JRE x86和x64的現有安裝啓動JNLP應用程序?
如果它是x86應用程序,並且應用程序以x64 javaws啓動,則x64 javaws webstart將更改爲x86路徑?
屬性「拱」沒有任何作用,在應用程序啓動時chrashs。
我們的客戶部分並行安裝了JRE x86和x64。默認情況下,JNLP在Windows上啓動,位於HKEY Classes Root JNLPFile中。但是,這顯示了x86或x64路徑。使用JRE x86和x64的現有安裝啓動JNLP應用程序?
如果它是x86應用程序,並且應用程序以x64 javaws啓動,則x64 javaws webstart將更改爲x86路徑?
屬性「拱」沒有任何作用,在應用程序啓動時chrashs。
Java 8u102在Java Web Start中加入了一個bug,當安裝了64位和32位JRE/JDK並且應用程序需要32/64位的不同JAR時(在我們的例子中,它是SWT應用程序,每個拱需要一個不同的swt.jar)。
看來你可以通過在jnlp中首先指定64位資源來解決這個bug。例如:
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="file:///c:/jnlp" href="demo.jnlp">
<information>
<title>Demo</title>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.8+"/>
<jar href="demo.jar" />
</resources>
<resources os="Windows" arch="amd64">
<jar href="win64/swt.jar"/>
</resources>
<resources os="Windows" arch="x86">
<jar href="win32/swt.jar"/>
</resources>
<application-desc main-class="package.to.MainClass"/>
</jnlp>
關鍵是如果你有一個應用程序,將只有32位工作,絕不會只有64位JRE中運行,對於arch="amd64"
資源資源之前出現arch="x86"
完全可以通過爲64位指定無效的j2se版本來強制javaws使用32位JRE(在這種情況下爲1.0.0
,請注意,j2se版本需要在特定於arch的資源部分內指定才能工作) 。
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="file:///c:/jnlp" href="demo.jnlp">
<information>
<title>Demo</title>
</information>
<security>
<all-permissions/>
</security>
<resources>
<jar href="demo.jar" />
</resources>
<resources os="Windows" arch="amd64">
<j2se version="1.0.0"/>
</resources>
<resources os="Windows" arch="x86">
<j2se version="1.8+"/>
<jar href="win32/swt.jar"/>
</resources>
<application-desc main-class="package.to.MainClass"/>
</jnlp>
感謝您報告此事件。我們正在努力解決這個問題 - https://bugs.openjdk.java.net/browse/JDK-8161986。 – Fairoz