2010-04-19 74 views
122

退出帶有代碼的Java應用程序的最佳方式是什麼?如何從程序中退出Java應用程序

+1

嗯。我認爲這個問題可能太籠統了。在什麼情況下退出? – 2010-04-19 21:22:40

+3

讓所有非守護進程線程正常完成? – 2010-04-19 21:35:53

+2

只是爲了退出一般 – Olaseni 2010-04-20 02:03:13

回答

165

您可以使用System.exit()來達到此目的。

根據Oracle的Java 8文檔:

public static void exit(int status)

終止當前運行的Java虛擬機。這個論點充當了一個狀態代碼;按照慣例,非零狀態碼指示異常終止

此方法在類Runtime中調用exit方法。此方法從不正常返回。

呼叫System.exit(n)實際上等效於調用:

Runtime.getRuntime().exit(n)

87
System.exit(0); 

的 「0」 讓任何人叫你的程序知道,一切都OK。但是,如果由於錯誤而退出,則應該使用System.exit(1);或與特定錯誤相對應的另一個非零數字。

另外,正如其他人所說,先清理!這涉及到關閉文件和其他開放資源。

+0

我以爲是System.exit(1)? – AFK 2010-04-19 21:21:16

+13

正如Chris所說,'System.exit(1)'(或任何其他編號)是,如果你想表明它由於錯誤而關閉。 'System.exit(0)'表示程序正常關閉。您也可以將1更改爲您喜歡的任意數字,然後當您從腳本運行應用程序時,可以確定是否出現錯誤。 – StormPooper 2011-11-24 12:59:38

3

我同意喬恩的觀點,讓你的應用程序對某事做出反應並調用System.exit()。

確保:

  • 您使用適當的退出值。 0表示正常退出,其他表示出現錯誤
  • 您關閉所有輸入和輸出流。文件,網絡連接等
  • 登錄或打印一個原因退出,特別是如果由於錯誤
5

System.exit()它通常不是最好的方式,但它取決於你的應用程序。

結束應用程序的常用方法是退出main()方法。這在有其他非deamon線程正在運行的情況下不起作用,對於具有圖形用戶界面(AWT,Swing等)的應用程序而言通常如此。對於這些應用程序,您可以找到一種方法來結束GUI事件循環(不知道是否可以使用AWT或Swing)或調用System.exit()

10

System.exit(int i)被使用,但我想它包含一個比較通用的方法shutdown(),在那裏你將包括「清理」的步驟,以及,關閉套接字連接,文件描述符,然後System.exit(x)退出裏面。

1

答案是System.exit(),但不是一件好事,因爲這會中止程序。任何清理,摧毀你打算做的事情都不會發生。

3

使用dispose();是關閉程序的一種非常有效的方法。

我發現使用System.exit(x)會重置交互窗格,並假設您需要某些信息會消失。

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

更好:Runtime.getRuntime()。halt(0); 在Scala中爲我完美工作! – 2013-05-27 11:53:59

+0

@GerhardHagerer,但如果你得到了不當前的runti,我呢? – 2013-06-25 14:06:14

+0

來自Javadoc for'halt':「應該非常小心地使用這個方法。與'exit'方法不同,這個方法不會導致關閉鉤子被啓動,並且不會運行未被引用的終結器,如果已經出口終止如果關閉序列已經啓動,那麼這個方法不會等待任何正在運行的關閉鉤子或終結器來完成他們的工作。「總之,你不需要使用'halt',你應該更喜歡'exit'。 – 2017-06-11 03:05:35

-1

System.exit(ABORT); 立即退出該過程。

+0

ABORT沒有這樣的變量。 – 2016-08-22 18:42:03

2

這個問題有兩個簡單的答案。

這是 「專業之道」:

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

這是一個比較笨拙的方法:

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

'System.exit(0);返回;'也是好的,返回可以防止任何代碼在系統退出之前運行,否則你需要一個標誌(..'即if(!called_exit){退出語句後的進一步代碼} – ycomp 2016-04-15 00:36:40

-1

這應做到以正確的方式:

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()會做你想做的。但在大多數情況下,您可能想要退出線程,並保持主線程活着。通過這樣做,您可以終止任務,但也可以在不重新啓動應用程序的情況下啓動其他任務。