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

145

Какой лучший способ выйти из приложения Java с кодом?

Olaseni
источник
1
Хм. Я думаю, что вопрос может быть слишком общим. Выйти при каких обстоятельствах?
Аллен Джордж
3
Пусть все ваши нити-демоны закончатся нормально?
Турбьерн Равн Андерсен

Ответы:

192

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

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

public static void exit(int status)

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

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

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

Runtime.getRuntime().exit(n)

Джон
источник
102
System.exit(0);

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

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

Крис Купер
источник
Я думал, что это System.exit (1)?
АФК
14
Как утверждает Крис System.exit(1)(или любой другой номер), если вы хотите указать, что он закрыт из-за ошибки. System.exit(0)указывает на то, что программа закрылась нормально. Вы также можете изменить 1 на любое число, которое вам нравится, тогда, когда вы запускаете приложение из скрипта, вы можете определить, произошла ли ошибка.
StormPooper
10

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

Бастьен
источник
6

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

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

Кристиан Семрау
источник
4

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

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

Джошуа
источник
3

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

Будьте уверены, что:

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

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

Вайшак Суреш
источник
1

Есть два простых ответа на вопрос.

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

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

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

//This just terminates the program, just like System.exit(0).
return;
Антон
источник
System.exit(0); return;это тоже хорошо, возврат предотвращает запуск любого кода рутера до того, как система может выйти, иначе вам понадобится флаг (..i.e. if (!called_exit) { further code after exit statement }
ycomp
-1
Runtime.getCurrentRumtime().halt(0);
Чувак братан
источник
1
Лучше: Runtime.getRuntime (). Halt (0); Отлично сработало для меня в Scala!
Герхард Хагерер
@GerhardHagerer, но что, если ты получишь не текущие рунти, я?
Чувак Бро
1
Из Javadoc для halt: «Этот метод должен использоваться с особой осторожностью. В отличие от exitметода, этот метод не вызывает запуска ловушек завершения работы и не запускает непроверенные финализаторы, если включена финализация при выходе. Если последовательность выключения имеет уже запущен, тогда этот метод не ожидает, пока какие-либо запущенные обработчики завершения работы или финализаторы завершат свою работу. " Короче говоря, вам не нужно использовать halt, вы должны предпочитать exit.
Эрвин Болвидт
-1

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

SmartFingers
источник
-3

System.exit (ПРЕРЫВАНИЕ); Выйти из процесса немедленно.

pooploser0110
источник
Нет такой переменной как ABORT.
Альфонсо Вергара
-3

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

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();
    }
}
user3596517
источник