Wiem, że użycie System.exit (0) może zakończyć program java, na przykład, jeśli mam okno JFrame, to zamknie i zakończy program, ale zastanawiam się, ile innych sposobów, można go zamknąć, a program być zakończone? Czy w przypadku wystąpienia błędu program zostanie zamknięty, a JFrame zostanie zamknięte?Ile sposobów może zakończyć się program java?
Odpowiedz
Innym sposobem zakończenia pracy programu Java jest wykonanie ostatniej instrukcji w kodzie Java. Również w przypadku wystąpienia błędu java.lang.OutOfMemory, program kończy się nieprawidłowo. Dzieje się tak, gdy wirtualna maszyna języka Java nie może przydzielić obiektu, ponieważ nie ma w nim pamięci, a moduł czyszczący nie może udostępnić więcej pamięci.
Odpowiedziałem na twoje pytanie w kontekście GUI Swinga, biorąc pod uwagę Twoją wzmiankę o JFrame
.
- W interfejsie graficznym Swing wątek z powiadomieniem o zdarzeniu będzie rejestrować wszystkie wyjątki, które wystąpią, ale nie zakończy aplikacji w tej sytuacji.
- Podobnie, jeśli inny wątek zgłasza wyjątek i kończy wątek Wysłanie zdarzenia, zapewnia to, że aplikacja jest utrzymywana przy życiu (ponieważ nie jest to wątek demona).
- Jeden punkt końcowy: Jeśli chcesz aplikacji mają być zakończone, gdy JFrame jest zamknięty, trzeba zadzwonić:
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
Inaczej rama będzie po prostu ukryty kiedy go zamknąć, ale aplikacja będzie nadal biegać.
Oto wszystko, co mogę myśleć poza czubek głowy:
main() zwraca (albo wartości lub void() Główny wykończeń wykonujących swoją ostatnią wypowiedź)
programu zgłasza wyjątek nieprzechwycony
System.exit (int)
może załamać?
W twoim przypadku zamknięcia JFrame, wierzę, że byłby onClose() obsługi, które albo wywołuje System.exit (0) lub powoduje główną metodę powrotu.
W odniesieniu do 1 .: Jeśli istnieją wątki inne niż deaemon, program będzie działał nawet po zwróceniu metody main(). – jeremytrimble
JFrames mają metodę o nazwie 'setDefaultCloseOperation', która przyjmuje jedną z tych stałych jako argument:' WindowConstants.HIDE_ON_CLOSE' (domyślnie), 'WindowConstants.DO_NOTHING_ON_CLOSE',' WindowConstants.DISPOSE_ON_CLOSE' i 'JFrame.EXIT_ON_CLOSE' – Powerlord
Proszę mieć spójrz na tę odpowiedź dotyczącą końca main(): http://stackoverflow.com/questions/2070951/main-function-does-not-return-anything-why/2070968#2070968 –
Program Java kończy się po zakończeniu ostatniego wątku bez flagi demona lub po wywołaniu metody wyłączającej maszynę wirtualną (System.exit(), Runtime.exit(), Runtime.halt() i ewentualnie trochę więcej).
Wszystko inne zależy od bibliotek wywołujących funkcję System.exit() (takich jak JFrame z EXIT_ON_CLOSE).
Nit-picking, ale co się stanie, jeśli zarejestrujesz hak zamykający, który wejdzie w nieskończoną pętlę, gdy będzie działał? – Adamski
Możesz również użyć Application.exit().
Jestem pewien, że 'Application' to tylko klasa framework, a nie część JRE - czy mógłbyś podać pełną kwalifikowaną nazwę klasy? –
Aby dodać do innych odpowiedzi:
- Jeśli proces, który jest gospodarzem VM jest mocno zakończony, program będzie samoistnie znikają
- To samo dzieje się, gdy wtyczka zostanie wyciągnął na maszynie hostingu VM :)
ROFL. +1 dla tego – DVK
Nie żartuję całkowicie :) Jest to właściwie ważny scenariusz dla serwera, który musi zakończyć się niepowodzeniem bez utraty danych. –
+1 to jeden z najgorszych scenariuszy. Gdyby nie to, większość oprogramowania o wysokiej dostępności mogło być ** znacznie ** szybsze. –
Możesz zakończyć uruchomiony program Java na zewnątrz. Przez zabicie procesu java.exe z menedżera zadań (w przypadku systemu Windows)
- 1. Ile szczegółów sprzętowych może aplet Java odkryć?
- 2. Jak dokować projekt maven? i ile sposobów to osiągnąć?
- 3. python: jak zakończyć wątek, gdy kończy się główny program
- 4. Podczas wykonywania w jaki sposób program java może określić, ile pamięci używa?
- 5. Program Java kończy się wynikiem java: 137
- 6. Czy exit() nie może zakończyć procesu?
- 7. Link przekierowuje stronę, zanim funkcja javascript onclick może zakończyć się
- 8. zewnętrzny program zatrzyma się, gdy program Java jest zatrzymany
- 9. gem install rails nie może zakończyć
- 10. Ile krawędzi może zawierać DAG?
- 11. Jak uzyskać ile pamięci program używa?
- 12. Program Excel czeka na kolejną aplikację, aby zakończyć działanie OLE.
- 13. Co się stanie, gdy uruchomi się program java?
- 14. Czy program Java może znać swój bieżący katalog?
- 15. Ile baz danych może obsługiwać MySQL?
- 16. Ile funkcji może obsługiwać nauka naukowa?
- 17. Ile połączeń sieciowych może obsługiwać komputer?
- 18. Ile warunków może spełnić, jeśli sprawdzenie dla
- 19. Ile maksymalnych połączeń może mieć wyrocznia?
- 20. ile danych może obsłużyć wykresy Js
- 21. Ile danych może zapisać przeglądarka w localStorage
- 22. Na ile sposobów można wywołać podprogram i zignorować jego prototyp w Perlu?
- 23. To połączenie powinno zakończyć się niepowodzeniem, prawda?
- 24. GUI Program Java - program do malowania
- 25. "Bezpiecznie" zakończyć uruchomiony program w C++ przy naciśnięciu klawisza?
- 26. Program nie może się załadować po ustawieniu bitu setuid na
- 27. Ile metod może mieć klasa C#?
- 28. Na ile sposobów można grupa studentów siedzące w rzędzie, uczniowie z tej samej klasy muszą przełączać
- 29. Jak załatać program Java?
- 30. Java NullPointerException - krótki program
Tylko jeśli funkcja main() jest nieważna. – bkritzer
Co to oznacza? Co się stanie, jeśli ostatni wiersz kodu wykonywany przez dany wątek (np. W obrębie Runnable) zostanie wykonany, ale istnieją inne wątki inne niż demony? – Adamski
ya right, tylko jeśli main() jest nieważne. – Thunderhashy