Cách thoát ứng dụng java từ trong chương trình


145

Cách tốt nhất để thoát khỏi ứng dụng Java bằng mã là gì?


1
Hừm. Tôi nghĩ rằng câu hỏi có thể quá chung chung. Thoát khỏi hoàn cảnh nào?
Allen George

3
Hãy để tất cả các chủ đề không phải daemon của bạn kết thúc bình thường?
Thorbjørn Ravn Andersen

Câu trả lời:


192

Bạn có thể sử dụng System.exit()cho mục đích này.

Theo tài liệu Java 8 của oracle:

public static void exit(int status)

Chấm dứt Máy ảo Java hiện đang chạy. Đối số phục vụ như một mã trạng thái; theo quy ước, một mã trạng thái khác không cho thấy sự chấm dứt bất thường .

Phương thức này gọi phương thức thoát trong lớp Runtime. Phương pháp này không bao giờ trở lại bình thường.

Cuộc gọi System.exit(n)có hiệu quả tương đương với cuộc gọi:

Runtime.getRuntime().exit(n)


102
System.exit(0);

"0" cho phép bất cứ ai gọi chương trình của bạn biết rằng mọi thứ đều ổn. Tuy nhiên, nếu bạn thoát do lỗi, bạn nên System.exit(1);hoặc với một số khác không tương ứng với lỗi cụ thể.

Ngoài ra, như những người khác đã đề cập, làm sạch đầu tiên! Điều đó liên quan đến việc đóng các tập tin và các tài nguyên mở khác.


Tôi nghĩ đó là System.exit (1)?
AFK

14
Như Chris nói, System.exit(1)(hoặc bất kỳ số nào khác) là nếu bạn muốn chỉ ra rằng nó bị đóng do lỗi. System.exit(0)chỉ ra rằng chương trình đóng bình thường. Bạn cũng có thể thay đổi 1 thành bất kỳ số nào bạn thích, sau đó khi bạn đang chạy ứng dụng của mình từ một tập lệnh, bạn có thể xác định xem có lỗi hay không.
StormPooper

10

System.exit(int i)sẽ được sử dụng, nhưng tôi sẽ đưa nó vào trong một shutdown()phương thức chung hơn , trong đó bạn cũng sẽ bao gồm các bước "dọn dẹp", đóng các kết nối ổ cắm, mô tả tệp, sau đó thoát ra System.exit(x).


6

System.exit() thường không phải là cách tốt nhất, nhưng nó phụ thuộc vào ứng dụng của bạn.

Cách thông thường để kết thúc một ứng dụng là thoát khỏi main()phương thức. Điều này không hoạt động khi có các luồng không phải deamon khác đang chạy, như thường thấy đối với các ứng dụng có giao diện người dùng đồ họa (AWT, Swing, v.v.). Đối với các ứng dụng này, bạn có thể tìm cách kết thúc vòng lặp sự kiện GUI (không biết điều đó có thể xảy ra với AWT hoặc Swing) hay gọi System.exit().


4

Sử dụng dispose();là một cách rất hiệu quả để đóng các chương trình của bạn.

Tôi thấy rằng bằng cách sử dụng System.exit(x)đặt lại khung tương tác và giả sử bạn cần một số thông tin ở đó tất cả sẽ biến mất.


3

Tôi đồng ý với Jon, ứng dụng của bạn phản ứng với điều gì đó và gọi System.exit ().

Hãy chắc chắn rằng:

  • bạn sử dụng giá trị thoát thích hợp. 0 là lối ra bình thường, bất cứ điều gì khác cho thấy có lỗi
  • bạn đóng tất cả các luồng đầu vào và đầu ra. Tập tin, kết nối mạng, vv
  • bạn đăng nhập hoặc in một lý do để thoát đặc biệt là vì đó là do lỗi

2

Câu trả lời là System.exit (), nhưng không phải là một điều tốt để làm vì điều này hủy bỏ chương trình. Bất kỳ việc dọn dẹp, phá hủy mà bạn dự định sẽ không xảy ra.


1

Có hai câu trả lời đơn giản cho câu hỏi.

Đây là "Cách chuyên nghiệp":

//This just terminates the program.
System.exit(0);

Đây là một cách vụng về hơn:

//This just terminates the program, just like System.exit(0).
return;

System.exit(0); return;cũng tốt, việc trả về ngăn không cho bất kỳ mã ruther nào được chạy trước khi Hệ thống có thể thoát, nếu không bạn cần một cờ (..i.e. if (!called_exit) { further code after exit statement }
ycomp

-1
Runtime.getCurrentRumtime().halt(0);

1
Tốt hơn: Runtime.getR.78 (). Tạm dừng (0); Làm việc hoàn hảo cho tôi trong Scala!
Gerhard Hagerer

@GerhardHagerer nhưng nếu bạn không nhận được runti hiện tại thì sao?
Dude Bro

1
Từ Javadoc cho halt: "Phương pháp này nên được sử dụng hết sức thận trọng. Không giống như exitphương pháp này, phương pháp này không gây ra các móc tắt máy được khởi động và không chạy các công cụ hoàn thiện không được kích hoạt nếu đã hoàn tất việc thoát lệnh. đã được bắt đầu rồi, phương pháp này không chờ đợi bất kỳ móc tắt hoặc bộ hoàn thiện đang chạy nào hoàn thành công việc của họ. " Nói tóm lại, bạn không cần sử dụng halt, bạn nên chọn exit.
Erwin Bolwidt

-1

System.exit()sẽ làm những gì bạn muốn. Nhưng trong hầu hết các tình huống, bạn có thể muốn thoát một luồng và để lại luồng chính. Bằng cách đó, bạn có thể chấm dứt một tác vụ, nhưng cũng giữ khả năng bắt đầu một tác vụ khác mà không cần khởi động lại ứng dụng.



-3

Điều này nên làm theo cách chính xác:

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();
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.