Tôi biết sử dụng System.exit (0) có thể kết thúc một chương trình java, ví dụ, nếu tôi có cửa sổ JFrame, nó sẽ đóng và kết thúc chương trình, nhưng tôi tự hỏi có bao nhiêu cách khác, nó có thể được đóng lại và chương trình không được kết thúc? Bao gồm cả khi xảy ra lỗi, chương trình có bị tắt và JFrame được đóng không?Có bao nhiêu cách mà Chương trình java có thể kết thúc?
Trả lời
Một cách khác mà chương trình Java kết thúc là khi câu lệnh cuối cùng trong mã java được thực thi. Ngoài ra khi xảy ra lỗi java.lang.OutOfMemory, chương trình chấm dứt bất thường. Điều này xảy ra khi Máy ảo Java không thể cấp phát một đối tượng vì nó không có bộ nhớ và không có bộ nhớ nào có thể được bộ thu gom rác cung cấp.
Tôi đã trả lời câu hỏi của bạn trong ngữ cảnh của GUI Swing được đề cập đến của bạn là JFrame
.
- Với giao diện Swing, chuỗi công văn sự kiện sẽ ghi lại mọi ngoại lệ xảy ra nhưng sẽ không chấm dứt ứng dụng trong tình huống này.
- Tương tự, nếu một chuỗi khác ném một ngoại lệ và chấm dứt chuỗi sự kiện công văn sẽ đảm bảo rằng ứng dụng được giữ nguyên (vì nó không phải là một chuỗi daemon).
- Một điểm cuối cùng: Nếu bạn muốn ứng dụng của bạn để được chấm dứt khi một JFrame được đóng lại, bạn cần phải gọi:
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
Nếu không thì khung sẽ chỉ đơn giản là được ẩn khi bạn đóng nó lại, nhưng ứng dụng sẽ tiếp tục chạy.
Dưới đây là tất cả tôi có thể nghĩ ra khỏi đỉnh đầu của tôi:
main() lợi nhuận (hoặc một giá trị hoặc một khoảng trống() kết thúc chính thực hiện tuyên bố cuối cùng của nó)
chương trình ném một ngoại lệ uncaught
System.exit (int)
Nó có thể sụp đổ?
Trong trường hợp đóng JFrame, tôi tin rằng sẽ có một trình xử lý onClose() gọi System.exit (0) hoặc khiến phương thức chính trả về.
Trong tham chiếu đến 1: Nếu không có chuỗi deaemon chạy, chương trình sẽ tiếp tục chạy ngay cả sau khi main() đã trả về. – jeremytrimble
JFrames có một phương thức có tên 'setDefaultCloseOperation' lấy một trong các hằng số này làm đối số:' WindowConstants.HIDE_ON_CLOSE' (mặc định), 'WindowConstants.DO_NOTHING_ON_CLOSE',' WindowConstants.DISPOSE_ON_CLOSE' và 'JFrame.EXIT_ON_CLOSE' – Powerlord
Vui lòng xem câu trả lời này về phần cuối của chính(): http://stackoverflow.com/questions/2070951/main-function-does-not-return-anything-why/2070968#2070968 –
Chương trình Java kết thúc khi Chủ đề cuối cùng không có cờ daemon kết thúc hoặc khi bạn gọi một phương thức tắt máy ảo (System.exit(), Runtime.exit(), Runtime.halt() và có thể là một ít nữa).
Bất cứ điều gì khác là tùy thuộc vào thư viện gọi System.exit() (chẳng hạn như JFrame với EXIT_ON_CLOSE).
Chọn nit, nhưng nếu bạn đã đăng ký một cái móc tắt máy sẽ đi vào vòng lặp vô hạn khi nó chạy? – Adamski
Bạn cũng có thể sử dụng Application.exit().
Khá chắc chắn, 'Ứng dụng' là một số lớp khung công tác chứ không phải là một phần của JRE - bạn có thể cung cấp tên lớp đầy đủ không? –
Để thêm vào câu trả lời khác:
- Nếu quá trình đó được lưu trữ VM được mạnh mẽ chấm dứt, chương trình của bạn sẽ tự nhiên biến mất
- Cùng xảy ra nếu cắm được kéo trên máy lưu trữ VM :)
ROFL. 1 cho rằng một trong những – DVK
Tôi không hoàn toàn đùa :) Đây thực sự là một kịch bản quan trọng cho một máy chủ mà cần phải thất bại mà không làm mất dữ liệu. –
+1 đó là một trong những kịch bản khó chịu nhất. Nếu không phải vậy, phần mềm khả dụng cao nhất có thể ** nhanh hơn **. –
Bạn có thể kết thúc chương trình Java đang chạy bên ngoài. Bằng cách giết chết quá trình java.exe từ trình quản lý tác vụ (trong trường hợp cửa sổ)
- 1. Làm thế nào tôi có thể kết thúc ncurses mà không kết thúc chương trình C++?
- 2. Có bao nhiêu mục mà ListView có thể lưu trữ?
- 3. Có bao nhiêu kết nối JDBC trong Java?
- 4. Có bao nhiêu kết nối tối đa mà oracle có thể có?
- 5. Có thể có bao nhiêu kết nối ổ cắm?
- 6. Tôi có thể sử dụng bao nhiêu Java với GWT?
- 7. Có bao nhiêu tuples trong kết nối?
- 8. Subprocess.call có thể được gọi mà không cần chờ quá trình kết thúc không?
- 9. Cách kết thúc/Buộc đóng chương trình (trong Clojure)
- 10. Làm thế nào tôi có thể xác định có bao nhiêu bộ nhớ chương trình của tôi hiện đang chiếm
- 11. Chương trình đã chạy bao nhiêu lần? C#
- 12. Có bao nhiêu kết nối trong nhóm kết nối ADO.NET
- 13. Có bao nhiêu Java SE api được viết bằng Java?
- 14. Có bao nhiêu LINQ?
- 15. Có thể tính toán chuyển hướng tiêu đề() để kết thúc luồng chương trình không?
- 16. Phạm vi giá trị mà phao có thể có trong Python là bao nhiêu?
- 17. Tôi có thể gửi bao nhiêu dữ liệu qua socket.emit?
- 18. Có bao nhiêu chi tiết phần cứng có thể khám phá Java Applet?
- 19. Có thể có bao nhiêu cạnh trong DAG?
- 20. Có bao nhiêu yêu cầu song song mà một cá thể Python của Google App Engine có thể xử lý?
- 21. Tôi có thể tạo bao nhiêu phiên bản System.Timers.Timer? Tôi có thể mở rộng bao xa?
- 22. có bao nhiêu múi giờ?
- 23. Có bao nhiêu lớp trong ấn bản tiêu chuẩn Java?
- 24. Ống bị hỏng không còn kết thúc chương trình nữa?
- 25. Có bao nhiêu đối tượng được tạo
- 26. lỗi kết thúc kỳ lạ của lỗi chương trình
- 27. Có bao nhiêu số sau dấu thập phân mà bạn có thể hiển thị bằng cách sử dụng R?
- 28. Kích thước tối đa mà biến phiên có thể giữ là bao nhiêu?
- 29. Android tôi có thể đi bao nhiêu chủ đề?
- 30. Có chương trình nào có thể giúp hiểu chương trình khác không?
Chỉ khi hàm main() bị vô hiệu. – bkritzer
Điều này có nghĩa là gì? Điều gì sẽ xảy ra nếu dòng mã cuối cùng đang được thực hiện bởi một chuỗi đã cho (ví dụ: bên trong một Runnable) được thực hiện nhưng có các luồng không phải là daemon khác còn sống? – Adamski
ya phải, chỉ khi chính() bị vô hiệu. – Thunderhashy