저는 각 클라이언트가 싱글 톤 ClientManager를 가지고있는 네트워크 어플리케이션을 작성하고 있습니다. 테스트의 경우에 대해 손으로 프로그램을 n 번 시작하지 않고 여러 클라이언트 (각각 고유 한 VM/프로세스에 있음)를 만들고 싶습니다.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는 : 나는 이클립스를 사용하고
- .
- 싱글 톤 문제는 예입니다. 을 입력하지 마십시오.은 공장을 만들 것을 제안합니다.
해결책 : HelloWorld2는 내부 클래스가 아니어야합니다.