코드로 Java 응용 프로그램을 종료하는 가장 좋은 방법은 무엇입니까?
코드로 Java 응용 프로그램을 종료하는 가장 좋은 방법은 무엇입니까?
답변:
System.exit()이 목적으로 사용할 수 있습니다 .
오라클의 Java 8 설명서에 따르면 :
public static void exit(int status)현재 실행중인 Java Virtual Machine을 종료합니다. 인수는 상태 코드 역할을합니다. 일반적으로 0이 아닌 상태 코드는 비정상 종료를 나타냅니다 .
이 메소드는 런타임 클래스에서 exit 메소드를 호출합니다. 이 메소드는 정상적으로 리턴되지 않습니다.
통화
System.exit(n)는 실제로 통화 와 동일합니다.
Runtime.getRuntime().exit(n)
System.exit(0);
"0"은 프로그램을 호출 한 사람이 모든 것이 정상임을 알 수 있습니다. 그러나 오류로 인해 종료 System.exit(1);되는 경우 특정 오류에 해당하는 0이 아닌 다른 숫자 를 사용해야 합니다.
또한 다른 사람들이 언급했듯이 먼저 청소하십시오! 여기에는 파일 및 기타 열린 리소스를 닫는 것이 포함됩니다.
System.exit(1)(또는 다른 숫자)는 오류로 인해 닫 혔음을 나타냅니다. System.exit(0)프로그램이 정상적으로 종료되었음을 나타냅니다. 1을 원하는 숫자로 변경할 수도 있고 스크립트에서 응용 프로그램을 실행할 때 오류가 있는지 확인할 수 있습니다.
System.exit() 일반적으로 가장 좋은 방법은 아니지만 응용 프로그램에 따라 다릅니다.
애플리케이션을 종료하는 일반적인 방법은 main()메소드 를 종료하는 것입니다. 그래픽 사용자 인터페이스 (AWT, Swing 등)가있는 응용 프로그램의 경우와 같이 다른 비 데몬 스레드가 실행중인 경우에는 작동하지 않습니다. 이러한 응용 프로그램의 경우 GUI 이벤트 루프를 종료하는 방법을 찾거나 (AWT 또는 Swing에서 가능한지 알 수 없음) 호출하십시오 System.exit().
답은 System.exit ()이지만 프로그램이 중단되면 좋지 않습니다. 청소, 파괴하려는 의도는 없습니다.
질문에 대한 두 가지 간단한 답변이 있습니다.
이것이 "전문적인 방법"입니다 :
//This just terminates the program.
System.exit(0);
이것은 더 성가신 방법입니다.
//This just terminates the program, just like System.exit(0).
return;
System.exit(0); return;또한 리턴은 시스템이 종료되기 전에 루터 코드가 실행되는 것을 방지합니다. 그렇지 않으면 플래그가 필요합니다 (..i.e. if (!called_exit) { further code after exit statement }
Runtime.getCurrentRumtime().halt(0);
halt: "이 방법은 매우주의해서 사용해야합니다. exit방법 과 달리이 방법으로 종료 후크가 시작되지 않고 종료시 종료가 활성화 된 경우 호출되지 않은 종료자를 실행하지 않습니다. 종료 순서가있는 경우 이미 시작된 경우이 방법은 실행중인 종료 후크 또는 종료자가 작업을 완료 할 때까지 기다리지 않습니다. " 요컨대,을 사용할 필요 halt가 없으며을 선호해야합니다 exit.
System.exit()당신이 원하는 것을 할 것입니다. 그러나 대부분의 경우 스레드를 종료하고 기본 스레드를 활성 상태로 두려고 할 수 있습니다. 이렇게하면 작업을 종료 할 수 있지만 앱을 다시 시작하지 않고도 다른 작업을 시작할 수 있습니다.
올바른 방법으로 수행해야합니다.
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();
}
}