Сколько способов может закончиться Java-программа? - PullRequest
5 голосов
/ 04 февраля 2010

Я знаю, что использование System.exit (0) может завершить Java-программу, например, если у меня есть окно JFrame, оно закроет и завершит программу, но мне интересно, сколько других способов можно закрыть и Программа будет закончена? В том числе при возникновении ошибки программа будет закрыта, а JFrame закрыт?

Ответы [ 7 ]

4 голосов
/ 04 февраля 2010

Чтобы добавить к другим ответам:

  • Если процесс, на котором размещена виртуальная машина, принудительно завершается, ваша программа самопроизвольно исчезает
  • То же самое происходит, если подключить вилку к машине, на которой установлена ​​виртуальная машина:)
3 голосов
/ 04 февраля 2010

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

Все остальное зависит от библиотек, которые вызывают System.exit () (например, JFrame с EXIT_ON_CLOSE).

2 голосов
/ 04 февраля 2010

Вот все, что я могу думать о макушке:

  1. main () возвращает (либо значение, либо void () main завершает выполнение своего последнего оператора)

  2. Программа генерирует исключение необработанным

  3. System.exit (целое)

  4. Это может привести к сбою?

В вашем случае закрытия JFrame, я полагаю, будет обработчик onClose (), который либо вызывает System.exit (0), либо вызывает возврат метода main.

1 голос
/ 04 февраля 2010

Еще один способ завершения Java-программы - выполнение последнего оператора в коде Java. Также, когда происходит ошибка java.lang.OutOfMemory, программа завершается ненормально. Это происходит, когда виртуальная машина Java не может выделить объект, поскольку ему не хватает памяти, и сборщик мусора не может сделать доступной память.

0 голосов
/ 08 апреля 2010

Вы можете завершить работающую Java-программу извне.Убив процесс java.exe из диспетчера задач (в случае windows)

0 голосов
/ 04 февраля 2010

Вы также можете использовать Application.exit ().

0 голосов
/ 04 февраля 2010

Я ответил на ваш вопрос в контексте Swing GUI, учитывая ваше упоминание JFrame.

  • В Swing GUI поток отправки событий будет регистрировать любые возникающие исключения, но не будет завершать работу приложения в этой ситуации.
  • Аналогичным образом, если другой поток генерирует исключение и завершает поток обработки события, он гарантирует, что приложение остается активным (поскольку это не поток демона).
  • И последнее замечание: если вы хотите, чтобы ваше приложение было закрыто при закрытии JFrame, вам нужно позвонить: setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

В противном случае рамка будет просто скрыта, когда вы закроете ее, но приложение продолжит работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...