我试图从java程序调用本机可执行文件。我有三个exe文件,一个用于win32,另一个linux 32-bint和第三个linux 64位,现在我可以调用正确的可执行文件,我需要确定正在运行哪个平台程序。我可以通过简单地获取“os.name”系统属性来确定操作系统,但不确定如何确定它是32位还是64位平台?
答案 0 :(得分:3)
以下是一些与我的机器上的值相关的系统属性:
os.arch: x86
os.name: Windows Vista
sun.arch.data.model: 32
根据这些信息,您应该可以猜到这样的事情:
String osName = System.getProperty("os.name").toLowerString();
String dataModel = System.getProperty("sun.arch.data.model");
boolean isWindows = osName.startsWith("windows");
boolean isLinux = osName.startsWith("linux"); // or whatever
boolean is32bit = "32".equals(dataModel);
boolean is64bit = "64".equals(dataModel);
if(isWindows && is32bit){
call32BitWindowsLib();
}
//etc.
有关完整者参考,请参阅:
答案 1 :(得分:0)
我认为如果没有本机调用(例如查询注册表),这是可能的,但您可以使用系统属性os.arch来确定当前运行应用程序的JRE的位数。
(如果有人在64位机器上运行32位JRE,你会得到x64,所以你不知道你是否使用64位架构,所以应该调用32位版本 - 但反过来说可以安全地调用本机应用程序的64位版本。)
另一种方式可能是暴力强迫: 为什么现在总是尝试eto运行64位版本,如果出现错误,请改用32位二进制文件?