Як вийти з програми java з програми


145

Який найкращий спосіб вийти з програми Java з кодом?


1
Хм. Я думаю, що питання може бути занадто загальним. Вийти за яких обставин?
Аллен Джордж

3
Нехай усі ваші недемонові нитки закінчуються нормально?
Thorbjørn Ravn Andersen

Відповіді:


192

Ви можете використовувати System.exit()для цієї мети.

Згідно з документацією Java 8 для Oracle:

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()методу. Це не працює, якщо виконуються інші недеманові потоки, як це зазвичай застосовується для програм із графічним інтерфейсом користувача (AWT, Swing тощо). У цих програмах ви або знайдете спосіб закінчити цикл подій GUI (не знаю, чи це можливо за допомогою AWT або Swing), або зателефонуйте System.exit().


4

Використання dispose();- це дуже ефективний спосіб закрити ваші програми.

Я виявив, що при використанні System.exit(x)скидання панелі взаємодій, припускаючи, що вам потрібна частина інформації, вона все зникає.


3

Я погоджуюся з Джоном, щоб ваша програма на щось реагувала і дзвонила System.exit ().

Будьте впевнені, що:

  • ви використовуєте відповідне значення виходу. 0 - нормальний вихід, все інше вказує на помилку
  • ви закриваєте всі вхідні та вихідні потоки. Файли, мережеві з'єднання тощо.
  • ви входите або друкуєте причину виходу, особливо якщо це відбувається через помилку

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, але що робити, якщо ви отримаєте не поточний runti, я?
Чувак Бро

1
Від Javadoc для halt: "Цей метод слід застосовувати з особливою обережністю. На відміну від exitметоду, цей метод не спричиняє запускання гачків відключення і не запускає незакликані фіналізатори, якщо фіналізація на виїзді увімкнена. Якщо послідовність відключення має вже розпочато, тоді цей метод не чекає, коли якісь запущені гачки відключення чи фіналізатори закінчать свою роботу ". Коротше кажучи, вам не потрібно використовувати halt, вам слід віддати перевагу exit.
Ервін Болвідт

-1

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



-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();
    }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.