2016-12-15 173 views
5

我有一個SWT Java應用程序,我試圖通過Java Web Start啓動。 32位版本工作正常,但很多人無法啓動64位版本。他們得到一個錯誤,表示無法在32位JVM上運行64位庫。我搜索了Google和StackOverflow等,但無法找到關於如何讓Web Start在64位JVM中啓動的答案。Java Web Start和64位JVM

我已經嘗試使用JVM選項,(-d64,-J-d64)沒有任何運氣。

這是甚至可能的,或者只是我只限於32位版本(理想情況下64位是最好的,因爲這個應用程序將解析大量來自日誌文件的數據以乾淨地顯示)?我需要在我的JNLP中更改哪些內容才能使其工作?

<?xml version = '1.0' encoding = 'windows-1252'?> 
<jnlp spec="1.0+" 
     codebase="http://example.com/confluence/download/attachments/212175616/" 
     href="LogMiner_64Bit.jnlp"> 
    <information> 
      <title>LogMiner 64 Bit</title> 
      <vendor> TECH</vendor> 
      <description>Parse Log messages </description> 
      <shortcut online="true"> 
       <desktop/> 
       <menu submenu="FA"/> 
      </shortcut> 
      <offline-allowed/> 
    </information> 
    <menu>64Bit</menu> 
    <security> 
      <all-permissions/> 
    </security> 
    <resources> 
      <java version="1.7+" java-vm-args="-J-d64"/> 
      <jar href="LogMiner64.jar" main="true" download="eager"/> 
    </resources> 
    <application-desc main-class="com.logMiner.ui.LogMiner"/> 
</jnlp> 

回答

4

您可以創建一個支持兩種體系結構的jnlp文件。例如:

<resources arch="amd64 x86_64"> 
    <jar href="LogMiner64.jar"/> 
</resources> 

<resources arch="x86 i386"> 
    <jar href="LogMiner32.jar"/> 
</resources> 

如果有必要的資源標籤也可以採取一個OS屬性,如os="Linux"os="Mac"os="Windows"

這樣你可以有一個單一的JNLP文件,將做關於正確的事到本機庫,無論用戶使用何種操作系統和體系結構。

又見How to distinguish 32 bit from 64 bit java version in jnlp files

+1

是的,但這並不能幫助誰都有自己的機器在32和64位JVM用戶使用可分配額外的內存。這是我試圖讓64位工作的主要原因。 – user2857108

+1

JNLP將使用第一個匹配資源。因此,首先使用64位的資源元素,會將第二個(32位)作爲回退。當然,您可以刪除32位的arch資源元素以禁止32位的JVM。 –