【问题标题】:Is it possible in Java to Invoke another class' main method and return to the invoking code?是否可以在 Java 中调用另一个类的 main 方法并返回调用代码?
【发布时间】:2013-06-13 19:55:18
【问题描述】:
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()");
    }
}


有没有办法做到这一点?我找到了一种使用反射做同样事情的方法,但它也不会返回到调用代码。我尝试使用ProcessBuilder 在单独的进程中执行它,但我想我错过了一些东西。

【问题讨论】:

  • 你试过了吗?当然有可能,main 只是另一种方法。
  • 您提到了 ProcessBuilder。您是否要完全启动该程序的第二个实例?或者,您是否尝试从另一个程序中启动一个新程序?
  • 我必须在这里道歉。我的 main() 方法最后调用了 System.exit() ,这就是它没有返回调用代码的原因。我只是注意到了。猜猜这使这是一个无用的问题。

标签: java


【解决方案1】:

您的代码几乎已经做到了——只是没有传入参数:

String[] args = {};
A.main(args);

main 方法只是“特殊”,因为它被视为入口点。否则,这是一个完全正常的方法,可以从其他代码中毫无问题地调用。当然,如果它的编写方式预计它只是被称为入口点(例如,如果它使用System.exit),但从语言的角度来看,这很好。 p>

【讨论】:

  • 我想在执行main之后返回someMethod()。现在没有。
  • @AswinParthasarathy:如果另一个main() 终止程序,就会发生这种情况。不要那样做。
  • @AswinParthasarathy:除非您的代码明确杀死 JVM,否则它会。但是您没有向我们展示该代码。
  • @Jon Skeet:是的。我已经意识到这是一个愚蠢的问题。我的班级确实退出了,这就是它没有返回的原因。
  • 如果您没有任何参数,我相信您可以传递 null。
【解决方案2】:

是的,您可以致电A.main()

你可以这样做:

String[] args = {};
A.main(args);

如果您不关心参数,那么您可以执行以下操作:

public static void main(String ... args)

并调用它:

A.main(); //no args here

【讨论】:

  • 是的,这就是问题所在。我没有注意到它最后有 System.exit() ,这就是为什么会感到困惑并发布。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

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

    ` 迭代部分,如果你愿意,你可以离开它。 我希望我以您想要的方式为您提供解决方案。 :)

    【讨论】:

      【解决方案5】:

      当然。 字符串 [] 参数 = {}; A.main(args);

      请注意:从上面的内容来看,main 方法仍然是程序的入口点。现在,如果您尝试在新的 PROCESS 中运行 main 方法,情况就不同了。

      【讨论】:

        猜你喜欢
        • 2011-02-02
        • 2023-02-20
        • 1970-01-01
        • 2020-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-08
        • 1970-01-01
        相关资源
        最近更新 更多