ProcessBuilder - Début d'un autre processus / JVM - HowTo?

Je suis en train d'écrire une application de réseau, où chaque Client a un Singleton ClientManager.
Pour tests, je voudrais créer plusieurs clients (chacun dans leur propre VM /processus) sans démarrer le programme à la main n-fois.

Les deux questions suivantes sur stackoverflow déjà décrire comment-faire:

Mon Code est sur la base de ces, mais cela ne fonctionne pas:

  • Le programme principal ne continue pas après la ponte est appelé.
  • Le pondu le code n'est pas exécuté.

Voici le code complet à l'aide de 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");
  }
}

Ce que je fais mal???

Btw:

  • Je suis à l'aide d'Eclipse.
  • Le Singleton problème est un simplifié exemple. S'il vous plaît ne pas suggèrent la création d'une usine.

Solution: HelloWorld2 ne doit pas être un intérieur de classe.

OriginalL'auteur Stefan K. | 2010-07-16