Правильное закрытие программы java, когда jdialog является главным окном
у меня есть JDialog в качестве главного окна в моем приложении (первоначально это был JFrame, но он показал на панели задач, которую я не хотел).
В настоящее время я делаю:
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
и когда я нажимаю кнопку Выход:
frame.dispose();
но процесс по-прежнему, кажется, висит в фоновом режиме
JFrame имел JFrame.EXIT_ON_CLOSE
который, казалось, делал то, что я хотел.
как я могу закрыть свое приложение правильно?
6 ответов
вы можете добавить
System.exit(0);
где вы хотите, чтобы программа закончилась, возможно, сразу после строки dispose ().
вам нужно добавить WindowListener, который будет делать систему.выход(0) при закрытии диалогового окна.
JDialog dialog = ...;
dialog.addWindowListener(new WindowAdapter() {
@Override public void windowClosed(WindowEvent e) {
System.exit(0);
}
});
конечно, система.выход (0) после нажатия кнопки выхода (которая была предложена в другом месте этого потока) по-прежнему необходим.
рассмотрите возможность использования JWindow
(un-decoretad по defalut), но это немного усложняет факт, что JWindow
требуются инициализации с JFrame
(просто должен существовать, ничего больше) как родитель
лучше было бы добавить WindowListener
и все события/действия будут перенаправлены/управлении таким образом
вы знаете, что EXIT_ON_CLOSE
поле также наследуется JDialog
, да?
как отметил @camickr, EXIT_ON_CLOSE
не является допустимым значением для setDefaultCloseOperation
метод JDialog
класса. Как указано в API,
задает операцию, которая будет выполняться по умолчанию, когда пользователь инициирует "закрыть" в этом диалоге. Необходимо указать одно из следующих значений выбор:
DO_NOTHING_ON_CLOSE
(определена вWindowConstants
): ничего не делайте; требуйте, чтобы программа обрабатывала операцию в метод windowClosing зарегистрированного объекта WindowListener.HIDE_ON_CLOSE
(определена вWindowConstants
): автоматически скрыть диалог после вызова любого зарегистрированногоWindowListener
объекты.DISPOSE_ON_CLOSE
(определено в WindowConstants): автоматическое скрытие и удаление диалога после вызова любого зарегистрированногоWindowListener
объекты.
если EXIT_ON_CLOSE
передается в качестве аргумента, an IllegalArgumentException
будет брошен.
для меня работал только с windowClosing event:
dialog.addWindowListener(new WindowAdapter()
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
вы можете попробовать это ниже удивительный исходный код -
JDialog dialog = (JDialog) container;
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setModal(false);
dialog.setVisible(false);
dialog.dispose();
Runtime.getRuntime().exit(1);
Это выше сказанное отключит процесс, а также после утилизации контейнера JDialog, также есть еще одно преимущество, если этот JDialog работает над любым другим JFrame или JDialog, поэтому родитель не завершит, но если этот jdialog работает самостоятельно, то процесс будет полностью завершен, наслаждайтесь.