Возможно ли в Java вызывать основной метод другого класса и вернуться к вызывающему коду?

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 чтобы выполнить его в отдельном процессе, но, я думаю, я что-то упустил.

Ответ 1

Ваш код уже почти делает это - он просто не передается в аргументах:

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

main метод является только "особым", поскольку он рассматривается как точка входа. В противном случае это совершенно нормальный метод, который может быть вызван из другого кода без проблем. Конечно, вы можете столкнуться с проблемами, если они написаны таким образом, что он будет считаться только точкой входа (например, если он использует System.exit), но с точки зрения языка это хорошо.

Ответ 2

Да, вы можете позвонить A.main().

Вы можете сделать это:

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

Если вам не нужны аргументы, вы можете сделать что-то вроде:

public static void main(String ... args)

и назовите его:

A.main(); //no args here

Ответ 3

Там нет ничего волшебного в названии "главное". То, что вы набросали, должно работать, поэтому ваша проблема должна быть чем-то другим. Проверьте свою претензию, изменив имя "main" на что-то еще, я уверен, он все еще не работает.

Ответ 4

Фактически, вы можете вызвать main метод, как то, как вы только что спросили, но не так, как вы это сделали. Во-первых, каждый процесс выполнения начинается с main метода. Итак, если вы хотите сделать это так, как хотите, вы можете сделать это правильно. Этот код выполнит Hello! World 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

Конечно. String [] args = {}; A.main (арг);

Просто имейте в виду: от чисто того, что у вас там есть, основной метод по-прежнему является точкой входа в программу. Теперь, если вы пытаетесь запустить основной метод в новом ПРОЦЕССЕ, это совсем другая история.