java-ProcessBuilder-启动另一个进程/ JVM-HowTo?

我正在编写一个网络应用程序,每个客户端都有一个Singleton ClientManager.
为了进行测试,我想创建多个客户端(每个客户端在他们自己的VM /进程中),而不用手动启动该程序n次.

以下关于*的两个问题已经描述了如何做:

> 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");
  }
}

我究竟做错了什么???

顺便说一句:

>我正在使用Eclipse.
> Singleton问题是一个简化的示例.请不要建议创建工厂.

解决方案:HelloWorld2一定不能是内部类.

解决方法:

我建议您使HelloWorld2成为*课程.看来Java需要*类.

这是我尝试的代码.

class Main
{
    static class Main2
    {
        public static void main ( String [ ] args )
        {
            System . out . println ( "YES!!!!!!!!!!!" ) ;
        }
    }

    public static void main ( String [ ] args )
    {
        System . out . println ( Main2 . class . getCanonicalName ( ) ) ;
        System . out . println ( Main2 . class . getName ( ) ) ;
    }
}

class Main3
{
    public static void main ( String [ ] args )
    {
        System . out . println ( "YES!!!!!!!!!!!" ) ;
    }
}

> getCanonicalName和getName返回不同​​的名称.哪一个是对的?他们都是错的.
> Main3的作品.

上一篇:Hive元数据配置到MySql


下一篇:有哪些资源可用于Python中的A / B拆分测试?