JFrame.dispose() против System.exit()
В чем разница между этими двумя методами - System.exit()
а также JFrame.dispose()
?
Если мы хотим закрыть приложение Java Swing при нажатии кнопки, какой метод мне следует использовать?
6 ответов
System.exit();
заставляет Java VM полностью завершиться.
JFrame.dispose();
вызывает JFrame
окно, которое будет уничтожено и очищено операционной системой. Согласно документации, это может привести к прекращению работы виртуальной машины Java, если нет другой доступной Windows, но на самом деле это следует рассматривать скорее как побочный эффект, а не как норму.
То, что вы выберете, действительно зависит от вашей ситуации. Если вы хотите завершить все в текущей Java VM, вы должны использовать System.exit()
и все будет убрано. Если вы хотите уничтожить только текущее окно, с побочным эффектом закрытия виртуальной машины Java, если это единственное окно, используйте JFrame.dispose()
,
JFrame.dispose()
public void dispose()
Освобождает все ресурсы собственного экрана, используемые этим окном, его подкомпонентами и всеми принадлежащими ему дочерними элементами. То есть ресурсы для этих Компонентов будут уничтожены, любая память, которую они потребляют, будет возвращена ОС, и они будут помечены как неотображаемые. Окно и его подкомпоненты можно снова отобразить, перестроив собственные ресурсы с последующим вызовом для упаковки или показа. Состояния воссозданного Окна и его подкомпонентов будут идентичны состояниям этих объектов в точке, где Окно было расположено (без учета дополнительных изменений между этими действиями).
Примечание. При удалении последнего отображаемого окна в виртуальной машине Java (VM) виртуальная машина может завершить работу. См. AWT Threading Issues для получения дополнительной информации.
System.exit ()
public static void exit(int status)
Завершает текущую запущенную виртуальную машину Java. Аргумент служит кодом состояния; условно, ненулевой код состояния указывает на ненормальное завершение. Этот метод вызывает метод выхода в классе Runtime. Этот метод никогда не возвращается нормально.
Вызов System.exit(n)
эффективно эквивалентно вызову:
Runtime.getRuntime().exit(n)
В дополнение к вышесказанному вы можете использовать System.exit()
вернуть код выхода, который может быть очень полезным, особенно если вы вызываете процесс автоматически, используя System.exit(code);
это может помочь вам определить, например, произошла ли ошибка во время выполнения.
Если у вас открыто несколько окон и вы хотите закрыть только то, что было закрыто, используйте
JFrame.dispose().
Если вы хотите закрыть все окна и прекратить использование приложения
System.exit()
Если вы завершаете свою программу, вы используете System.exit(0);
С другой стороны, у вас есть несколько окон, но вы можете завершить и закрыть только одно окно, тогда вы используете dispose ();
JFrame.dispose() влияет только на этот кадр (освобождает все собственные ресурсы экрана, используемые этим компонентом, его подкомпонентами и всеми дочерними элементами). System.exit() влияет на всю JVM.
Если вы хотите закрыть все JFrame или все окна (поскольку фреймы расширяют Windows), чтобы завершить работу приложения в упорядоченном режиме, вы можете сделать следующее:
Arrays.asList(Window.getWindows()).forEach(e -> e.dispose()); // or JFrame.getFrames()