我在寫一個網絡應用程序,每個客戶端都有一個Singleton ClientManager。 對於測試,我想創建幾個客戶端(每個在他們自己的虛擬機/進程),而無需手工啓動程序n次。ProcessBuilder - 啓動另一個進程/ JVM - HowTo?
上計算器下面兩個問題已經描述瞭如何-做到這一點:
- Is this really the best way to start a second JVM from Java code?
- Java: Executing a Java application in a separate process
我的代碼是基於這些,但它不工作:
- 調用spawn後主程序不會繼續。
- 產生的代碼沒有得到執行。
下面是一個使用ProcessBuilder的完整代碼:
public class NewVM {
static class HelloWorld2 {
public static void main(String[] args) {
System.out.println("Hello World");
System.err.println("Hello World 2");
}
}
public static void main(String[] args) throws Exception {
startSecondJVM(HelloWorld2.class, true);
startSecondJVM(HelloWorld2.class, false);
System.out.println("Main");
}
public static void startSecondJVM(Class<? extends Object> clazz, boolean redirectStream) throws Exception {
System.out.println(clazz.getCanonicalName());
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,
clazz.getCanonicalName());
processBuilder.redirectErrorStream(redirectStream);
Process process = processBuilder.start();
process.waitFor();
System.out.println("Fin");
}
}
我在做什麼錯???
BTW:
- 我使用Eclipse。
- 單例問題是一個簡化的的例子。請做不是建議創建一個工廠。
解決方案: HelloWorld2不能是內部類。