Как выйти из Java-приложения из программы

Как лучше всего закрыть приложение Java с помощью кода?


person Olaseni    schedule 19.04.2010    source источник
comment
Хм. Думаю, вопрос может быть слишком общим. Выйти при каких обстоятельствах?   -  person Allen George    schedule 20.04.2010
comment
Разрешить всем вашим потокам, не являющимся демонами, нормально завершиться?   -  person Thorbjørn Ravn Andersen    schedule 20.04.2010


Ответы (12)


Вы можете использовать System.exit() для этого.

Согласно документации Oracle Java 8:

public static void exit(int status)

Завершает работу текущей виртуальной машины Java. Аргумент служит кодом состояния; по соглашению ненулевой код состояния указывает на аварийное завершение.

Этот метод вызывает метод выхода в классе Runtime. Этот метод никогда не возвращает нормально.

Вызов System.exit(n) фактически эквивалентен вызову:

Runtime.getRuntime().exit(n)

person Jon    schedule 19.04.2010

System.exit(0);

«0» дает знать, кто звонил в вашу программу, что все прошло нормально. Если, однако, вы выходите из-за ошибки, вам следует System.exit(1); или с другим ненулевым числом, соответствующим конкретной ошибке.

Кроме того, как уже упоминали другие, сначала очистите! Это включает в себя закрытие файлов и других открытых ресурсов.

person Chris Cooper    schedule 19.04.2010
comment
Я думал, что это System.exit (1)? - person AFK; 20.04.2010
comment
Как утверждает Крис, System.exit(1) (или любое другое число) означает, что вы хотите указать, что он закрыт из-за ошибки. System.exit(0) указывает, что программа закрылась нормально. Вы также можете изменить 1 на любое число, которое вам нравится, тогда, когда вы запускаете свое приложение из сценария, вы можете определить, произошла ли ошибка. - person StormFoo; 24.11.2011

System.exit(int i) должен использоваться, но я бы включил его в более общий метод shutdown(), в который вы также должны включить шаги «очистки», закрытие соединений сокетов, дескрипторы файлов, затем выход с помощью System.exit(x).

person Bastien    schedule 20.04.2010

System.exit() обычно не лучший способ, но это зависит от вашего приложения.

Обычный способ завершить приложение - выйти из метода main(). Это не работает, когда работают другие потоки, не относящиеся к deamon, как это обычно бывает для приложений с графическим пользовательским интерфейсом (AWT, Swing и т. Д.). Для этих приложений вы либо находите способ завершить цикл событий графического интерфейса пользователя (не знаю, возможно ли это с помощью AWT или Swing), либо вызываете System.exit().

person Christian Semrau    schedule 19.04.2010

Использование dispose(); - очень эффективный способ закрытия ваших программ.

Я обнаружил, что использование System.exit(x) сбрасывает панель взаимодействий и, если вам нужна какая-то информация, она исчезает.

person Joshua    schedule 17.06.2011

Я согласен с Джоном, пусть ваше приложение на что-то отреагирует и вызовет System.exit ().

Убедитесь, что:

  • вы используете соответствующее значение выхода. 0 - нормальный выход, все остальное указывает на ошибку
  • вы закрываете все потоки ввода и вывода. Файлы, сетевые подключения и т. Д.
  • вы регистрируете или распечатываете причину выхода, особенно если это из-за ошибки
person Freiheit    schedule 19.04.2010

Ответ - System.exit (), но это не лучший вариант, поскольку это приводит к прерыванию программы. Никакой уборки, разрушения, которое вы намереваетесь сделать, не произойдет.

person Vaishak Suresh    schedule 20.04.2010

На этот вопрос есть два простых ответа.

Это «Профессиональный путь»:

//This just terminates the program.
System.exit(0);

Это более неуклюжий способ:

//This just terminates the program, just like System.exit(0).
return;
person Anton    schedule 27.07.2015
comment
System.exit(0); return; тоже хорошо, return предотвращает запуск любого ruther кода до того, как Система сможет выйти, иначе вам понадобится флаг (.. i.e. if (!called_exit) { further code after exit statement } - person ycomp; 15.04.2016

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

person SmartFingers    schedule 13.10.2017

System.exit (ABORT); Немедленно прекратите процесс.

person pooploser0110    schedule 22.04.2014
comment
Не существует такой переменной, как ABORT. - person Alfonso Vergara; 22.08.2016

Это должно происходить правильно:

mainFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
mainFrame.addWindowListener(new WindowListener() {

@Override
public void windowClosing(WindowEvent e) {
    if (doQuestion("Really want to exit?")) {
      mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      mainFrame.dispose();
    }
}
person user3596517    schedule 14.10.2015

person    schedule
comment
Лучше: Runtime.getRuntime (). Halt (0); У меня отлично работал в Scala! - person Gerhard Hagerer; 27.05.2013
comment
@GerhardHagerer, а что, если ты получишь не текущий рунти, я? - person Dude Bro; 25.06.2013
comment
Из документации Javadoc для halt: этот метод следует использовать с особой осторожностью. В отличие от метода exit, этот метод не вызывает запуск обработчиков завершения работы и не запускает неактивированные финализаторы, если включена финализация при выходе. Если последовательность выключения уже была инициирована, этот метод не ожидает, пока какие-либо запущенные обработчики выключения или финализаторы завершат свою работу. Короче говоря, вам не нужно использовать halt, вы должны предпочесть exit. - person Erwin Bolwidt; 11.06.2017