问题描述
对我来说不清楚,在启动次要进程时,您总是想使用完全相同的参数,类路径或其他任何东西(尤其是-X类的东西-例如,为什么孩子需要与父对象相同的堆设置)。
我希望使用某种外部配置来为子代定义这些属性。还需要做更多的工作,但是我认为最终您将需要灵活性。
要查看可能的配置设置的范围,您可以查看Eclipse中的“运行配置”设置。那里有很多选项卡值得配置。
解决方法
这是我之前的问题的后续内容,我对此感到有些尴尬。但是无论如何:您将如何以独立于系统的方式从独立的Java程序中启动第二个JVM?而且,例如,在不依赖于诸如JAVA_HOME之类的env变量的情况下,它可能会指向与当前正在运行的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 …,…)启动了。