在 Windows 上,java.library.path 系统属性以 bin 目录的路径开头,该目录包含用于运行 jar 文件的 java.exe。
这是有道理的,因为在 Windows 上,任何可执行文件查找 DLL 文件的第一个位置是包含可执行文件本身的目录。所以很自然,当 JVM 运行时,它首先查找 DLL 的地方是包含 java.exe 的目录。
您可以通过以下方式获取 java.exe 的路径:
final String javaLibraryPath = System.getProperty("java.library.path");
final File javaExeFile = new File(
javaLibraryPath.substring(0, javaLibraryPath.indexOf(';')) + "\\java.exe"
);
final String javaExePath =
javaExeFile.exists() ? javaExeFile.getAbsolutePath() : "java";
此代码是特定于 Windows 的 - 我对路径分隔符 (;) 和文件分隔符 () 进行了硬编码。我还回退到“java”,以防库路径技巧不知何故不起作用。
我已经在 Windows 7 上使用 Java 6 和 7 对此进行了测试。我尝试了 32 位和 64 位版本的 Java。