Jaki jest najlepszy sposób na zamknięcie aplikacji Java zawierającej kod?
Jaki jest najlepszy sposób na zamknięcie aplikacji Java zawierającej kod?
Odpowiedzi:
Możesz użyć System.exit()do tego celu.
Zgodnie z dokumentacją Oracle dotyczącą języka Java 8:
public static void exit(int status)Kończy aktualnie uruchomioną wirtualną maszynę Java. Argument służy jako kod statusu; Zgodnie z konwencją niezerowy kod statusu wskazuje na nieprawidłowe zakończenie .
Ta metoda wywołuje metodę wyjścia w klasie Runtime. Ta metoda nigdy nie zwraca normalnie.
Wezwanie
System.exit(n)jest w rzeczywistości równoznaczne z wezwaniem:
Runtime.getRuntime().exit(n)
System.exit(0);
Wartość „0” informuje osobę dzwoniącą do programu, że wszystko poszło dobrze. Jeśli jednak rezygnujesz z pracy z powodu błędu, powinieneś System.exit(1);lub z inną niezerową liczbą odpowiadającą określonemu błędowi.
Ponadto, jak wspominali inni, najpierw posprzątaj! Obejmuje to zamykanie plików i innych otwartych zasobów.
System.exit(1)(lub jakakolwiek inna liczba) jest wtedy, gdy chcesz wskazać, że został zamknięty z powodu błędu. System.exit(0)wskazuje, że program został normalnie zamknięty. Możesz również zmienić 1 na dowolną liczbę, a następnie uruchamiając aplikację ze skryptu, możesz określić, czy wystąpił błąd.
System.exit() zwykle nie jest najlepszym sposobem, ale zależy to od aplikacji.
Zwykłym sposobem zakończenia aplikacji jest wyjście z main()metody. To nie działa, gdy działają inne nie-demoniczne wątki, jak to zwykle bywa w przypadku aplikacji z graficznym interfejsem użytkownika (AWT, Swing itp.). W przypadku tych aplikacji albo znajdujesz sposób na zakończenie pętli zdarzeń GUI (nie wiem, czy jest to możliwe w przypadku AWT czy Swing), albo wywołanie System.exit().
Zgadzam się z Jonem, niech twoja aplikacja zareaguje na coś i wywołaj System.exit ().
Być pewnym że:
Odpowiedzią jest System.exit (), ale nie jest to dobra rzecz, ponieważ powoduje to przerwanie programu. Żadne sprzątanie, niszczenie, które zamierzasz zrobić, nie nastąpi.
Są dwie proste odpowiedzi na to pytanie.
Oto „profesjonalny sposób”:
//This just terminates the program.
System.exit(0);
To jest bardziej niezdarny sposób:
//This just terminates the program, just like System.exit(0).
return;
System.exit(0); return;jest również dobry, powrót zapobiega uruchomieniu jakiegokolwiek innego kodu przed zamknięciem systemu, w przeciwnym razie potrzebna i.e. if (!called_exit) { further code after exit statement }
Runtime.getCurrentRumtime().halt(0);
halt: „Tej metody należy używać z dużą ostrożnością. W przeciwieństwie do exitmetody ta metoda nie powoduje uruchamiania przechwytywania zamykania systemu i nie uruchamia nie wywołanych finalizatorów, jeśli włączono finalizację przy wyjściu. Jeśli sekwencja zamykania została włączona została już zainicjowana, to ta metoda nie czeka, aż jakiekolwiek działające punkty zaczepienia zamykania lub finalizatory zakończą swoją pracę. " Krótko mówiąc, nie powinieneś go używać halt, powinieneś preferować exit.
System.exit()zrobisz, co chcesz. Ale w większości sytuacji prawdopodobnie chcesz wyjść z wątku i pozostawić główny wątek żywy. W ten sposób możesz zakończyć zadanie, ale także zachować możliwość rozpoczęcia kolejnego zadania bez ponownego uruchamiania aplikacji.
System.exit (ABORT); Zakończ proces natychmiast.
Powinno to zrobić to we właściwy sposób:
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();
}
}