在Java中是否可以调用另一个类';main方法并返回到调用代码?

在Java中是否可以调用另一个类';main方法并返回到调用代码?,java,Java,有没有办法做到这一点?我发现了一种使用反射执行相同操作的方法,但它也不会返回到调用代码。我尝试使用ProcessBuilder在一个单独的进程中执行它,但我想我遗漏了一些东西。您的代码几乎已经做到了这一点-它只是没有传递参数: public class A{ public static void main(String[] args) { //Main code } } public class B{ void someMethod()



有没有办法做到这一点?我发现了一种使用反射执行相同操作的方法,但它也不会返回到调用代码。我尝试使用
ProcessBuilder
在一个单独的进程中执行它,但我想我遗漏了一些东西。

您的代码几乎已经做到了这一点-它只是没有传递参数:

public class A{
    public static void main(String[] args)
    {
        //Main code
    }
}

public class B{
    void someMethod()
    {
        String[] args={};
        A.main();
        System.out.println("Back to someMethod()");
    }
}

main
方法在作为入口点处理方面只是“特殊的”。否则,它是一个完全正常的方法,可以从其他代码中调用,不会出现任何问题。当然,如果它的编写方式只希望将其作为入口点调用(例如,如果它使用
System.exit
),您可能会遇到问题,但从语言的角度来看,这很好。

是的,您可以调用
a.main()

您可以这样做:

String[] args = {};
A.main(args);
如果您不关心参数,则可以执行以下操作:

String[] args = {};
A.main(args);
并称之为:

public static void main(String ... args)
当然。 字符串[]args={}; A.main(args)


请注意:从你所掌握的情况来看,主要方法仍然是程序的入口点。现在,如果您试图在一个新进程中运行main方法,情况就不同了。

名称“main”没有什么神奇之处。你所画的应该有用,所以你的问题一定是别的。通过将“main”的名称更改为某物来测试我的声明
否则,我打赌它仍然不起作用。

事实上,您可以像刚才请求的那样调用
main
方法,但不能像刚才那样调用。首先,每个执行过程都从
main
方法开始。所以,如果你想按你想的方式做,你可以这样做。此代码将执行
Hello!世界
八次:

A.main(); //no args here
B类
{
B()
{

while(A.id)您是否尝试过它?当然有可能,
main
只是另一种方法。您提到了ProcessBuilder。您是否试图启动该程序的第二个实例?或者,您是否试图从另一个实例中启动一个新程序?我必须在此道歉。我的main()方法调用了System.exit()最后,这就是它没有返回到调用代码的原因。我只是注意到了。我猜这是一个没用的问题。我想在执行main之后返回到someMethod()。现在它没有返回。@AswinParthasarathy:如果另一个
main(),就会发生这种情况
终止程序。不要这样做。@AswinParthasarathy:除非你的代码显式杀死JVM,否则会的。但是你还没有给我们看那段代码。@Jon Skeet:啊,是的。我已经意识到这是一个愚蠢的问题。我的类确实退出了,这就是它没有返回的原因。如果你没有任何参数,我相信你可以传递null。是的他提出了一个问题。我没有注意到它最后有System.exit(),这就是为什么我感到困惑并发布了它。
class B
{
  B()
  {
    while(A.i<8)
    {
      String a[]={"Main","Checking"};
      A.main(a);
    }
    System.exit(0);
  }

}

class A
{
  public static int i=0;
  public static void main(String args[])
  {
    System.out.println("Hello! World");
    i++;
    B ob=new B();
  }
}