2015-11-05 202 views
1

我有下面這段代碼,如果我的應用程序在64位平臺上運行,以檢測:檢測Java虛擬機架構10

public static boolean is64BitVM() { 
    String bits = System.getProperty("sun.arch.data.model", "?"); 
    logger.debug(String.format("sun.arch.data.model=%s", bits)); 
    if (bits.equals("64")) { 
    return true; 
    } 
    String java_vm_name = System.getProperty("java.vm.name"); 
    logger.debug(String.format("java.vm.name=%s", java_vm_name));  

    String os_arch = System.getProperty("os.arch"); 
    logger.debug(String.format("os.arch=%s", os_arch)); 

    if (bits.equals("?")) { 
    // probably sun.arch.data.model isn't available 
    // maybe not a Sun JVM? 
    // try with the vm.name property 
    return java_vm_name.toLowerCase().indexOf("64") >= 0; 
    } 
    // probably 32bit 
    return false; 
} 

它用來在Windows 7上很好地運行,但是升級後的Windows 10同一段代碼開始報告32位架構:

2015-11-05 17:53:15,429 DEBUG [javawsApplicationMain] sun.arch.data.model=32 
2015-11-05 17:53:15,431 DEBUG [javawsApplicationMain] java.vm.name=Java HotSpot(TM) Client VM 
2015-11-05 17:53:15,431 DEBUG [javawsApplicationMain] os.arch=x86 

奇怪的是,當通過JWS運行報告32位架構,但是當我在我的IDE本地運行它,我得到正確的結果(64位)。 似乎是Windows 10安全模型的另一個嚴重問題。 有什麼想法?

+0

您確定您正在運行相同的VM嗎?你有多個安裝? – Doon

+0

你有32位或64位JDK/JRE嗎? – Rustam

+0

哪個版本的jdk或jre? – Marged

回答

0

工作的解決方案是卸載32位版本,然後安裝最新的64位Java。起初我已經安裝了Java 8,但我無法強制啓動我的JWS應用程序(即使將自簽名證書添加到例外以及.jnlp文件的URL也沒有幫助)。最終安裝了最新的Java 7,並且做到了這一點。