Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ProcessBuilder-启动另一个进程/JVM-如何?_Java_Testing_Process_Jvm_Fork - Fatal编程技术网

Java ProcessBuilder-启动另一个进程/JVM-如何?

Java ProcessBuilder-启动另一个进程/JVM-如何?,java,testing,process,jvm,fork,Java,Testing,Process,Jvm,Fork,我正在编写一个网络应用程序,其中每个客户端都有一个Singleton ClientManager。 为了进行测试,我想创建几个客户端(每个客户端都在自己的VM/进程中),而不用手动启动程序n次 关于stackoverflow的以下两个问题已经描述了如何做到这一点: 我的代码基于这些,但不起作用: 调用spawn后,主程序不会继续 生成的代码无法执行 以下是使用以下命令的完整代码: 公共类NewVM{ 静态类HelloWorld2{ 公共静态void main(字符串[]args){

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

关于stackoverflow的以下两个问题已经描述了如何做到这一点:

我的代码基于这些,但不起作用:

  • 调用spawn后,主程序不会继续
  • 生成的代码无法执行
以下是使用以下命令的完整代码:

公共类NewVM{
静态类HelloWorld2{
公共静态void main(字符串[]args){
System.out.println(“你好世界”);
System.err.println(“Hello World 2”);
}
}
公共静态void main(字符串[]args)引发异常{
startSecondJVM(HelloWorld2.class,true);
startSecondJVM(HelloWorld2.class,false);
System.out.println(“主”);
}

公共静态void startSecondJVM(Class我建议您将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工作

  • 我想我看到了部分问题的解决方法:
    process.waitFor()
    阻止控件在子流程结束前返回main()

    为了找出生成的进程没有启动的原因,我建议将所有参数打印到
    ProcessBuilder
    构造函数中,并检查使用这些参数调用的手动JVM是否成功。特别是,您需要将该类名作为具有
    静态void main(字符串[])的类的名称。

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