这是我的后续自己之前的问题 https://stackoverflow.com/questions/1218790/我有点不好意思问这个...但是无论如何:如何以独立于系统的方式从独立的 Java 程序启动第二个 JVM?并且无需依赖诸如 JAVA_HOME 之类的环境变量,因为它可能指向与当前正在运行的 JRE 不同的 JRE。我想出了下面的代码,它确实有效,但感觉有点尴尬:
public static void startSecondJVM() throws Exception {
String separator = System.getProperty("file.separator");
String classpath = System.getProperty("java.class.path");
String path = System.getProperty("java.home")
+ separator + "bin" + separator + "java";
ProcessBuilder processBuilder =
new ProcessBuilder(path, "-cp",
classpath,
AnotherClassWithMainMethod.class.getName());
Process process = processBuilder.start();
process.waitFor();
}
此外,当前运行的 JVM 可能已使用第二个 JVM 不知道的其他一些参数(-D、-X...、...)启动。
我认为答案是“是”。这可能与您在 Java 中使用系统无关代码所做的一样好。但请注意,即使这也只是相对地系统独立。例如,在某些系统中:
- JAVA_HOME 变量可能尚未设置,
- 用于启动 JVM 的命令名称可能不同(例如,如果它不是 Sun JVM),或者
- 命令行选项可能会有所不同(例如,如果它不是 Sun JVM)。
如果我的目标是在启动(第二个)JVM 时获得最大的可移植性,我想我会使用包装脚本来实现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)