Возможно ли в 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 (арг);
Просто имейте в виду: от чисто того, что у вас там есть, основной метод по-прежнему является точкой входа в программу. Теперь, если вы пытаетесь запустить основной метод в новом ПРОЦЕССЕ, это совсем другая история.