2010-04-19 100 views
122

Cách tốt nhất để thoát khỏi ứng dụng Java bằng mã là gì?Cách thoát ứng dụng java từ bên trong chương trình

+1

Hmm. Tôi nghĩ câu hỏi có thể quá chung chung. Thoát khỏi hoàn cảnh nào? –

+3

Để tất cả các chủ đề không phải daemon của bạn hoàn thành bình thường? –

+2

Chỉ cần bỏ thuốc lá nói chung – Olaseni

Trả lời

165

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

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

public static void exit(int status)

Chấm dứt hiện đang chạy Java Virtual Machine. Đối số đóng vai trò như một mã trạng thái; theo quy ước, mã trạng thái không đồng nhất cho biết 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 Thời gian chạy. Phương pháp này không bao giờ trở lại bình thường.

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

Runtime.getRuntime().exit(n)

87
System.exit(0); 

Các "0" cho phép bất cứ ai mà gọi là chương trình của bạn biết rằng tất cả mọi thứ đã đi vào OK. Tuy nhiên, nếu bạn đang hủy do lỗi, bạn nên System.exit(1); hoặc với một số khác 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, hãy dọn dẹp trước! Điều đó liên quan đến việc đóng các tệp và các tài nguyên mở khác.

+0

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

+13

Như Chris nói, 'System.exit (1)' (hoặc bất kỳ số nào khác) là nếu bạn muốn cho biết rằng nó đã đóng do lỗi. 'System.exit (0)' chỉ ra rằng chương trình đóng lại 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ừ tập lệnh, bạn có thể xác định xem có lỗi hay không. – StormPooper

3

Tôi đồng ý với Jon, yêu cầu ứ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ị xuất cảnh thích hợp. 0 là lối ra bình thường, bất kỳ điều gì khác cho biết có lỗi
  • bạn đóng tất cả các luồng đầu vào và đầu ra. Tác phẩm, 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à nếu nó vì một lỗi
5

System.exit() thường là 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 ứng dụng là thoát phương thức main(). Điều này không hoạt động khi có các luồng không chạy deamon khác, như thường lệ đố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 nếu có thể với AWT hoặc Swing), hoặc gọi System.exit().

10

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

1

Câu trả lời là System.exit(), nhưng không phải là một việc tốt để làm đ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 định làm sẽ không xảy ra.

3

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 việc sử dụng System.exit(x) đặt lại ngăn tương tác và giả sử bạn cần một số thông tin ở đó tất cả đều biến mất.

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

Tốt hơn: Runtime.getRuntime() .halt (0); Làm việc hoàn hảo cho tôi trong Scala! –

+0

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

+0

Từ Javadoc cho 'halt':" Phương thức này nên được sử dụng hết sức thận trọng. Không giống như phương thức 'thoát', phương thức này không gây ra các móc tắt được khởi động và không chạy các trình gỡ bỏ chưa được giải quyết nếu finalization-on-exit đã được Nếu trình tự tắt đã được khởi tạo thì phương thức này không chờ cho bất kỳ hook shutdown đang chạy hoặc finalizers nào kết thúc công việc của chúng. " Trong ngắn hạn, bạn không cần phải sử dụng 'halt', bạn nên thích' thoát'. –

-1

System.exit (ABORT); Thoát khỏi quy trình ngay lập tức.

+0

Không có biến nào như ABORT. –

2

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; 
+0

'System.exit (0); trả về; 'cũng tốt, sự trả về ngăn cản bất kỳ mã ruther nào được chạy trước khi hệ thống có thể thoát ra, nếu không bạn sẽ cần một cờ (..' nghĩa là if (! called_exit) {more code after exit statement} ' – ycomp

-1

này nên làm điều đó 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(); 
    } 
} 
-1

System.exit() sẽ làm những gì bạn muốn. Nhưng trong hầu hết các trường hợp, bạn có thể muốn thoát khỏi một chuỗi, và để nguyên chỉ sống. Bằng cách đó, bạn có thể chấm dứt một nhiệm vụ, nhưng cũng giữ khả năng để bắt đầu một nhiệm vụ khác mà không cần khởi động lại ứng dụng.

Các vấn đề liên quan