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