프로그램 내에서 Java 앱을 종료하는 방법


145

코드로 Java 응용 프로그램을 종료하는 가장 좋은 방법은 무엇입니까?


1
흠. 나는 그 질문이 너무 일반적이라고 생각합니다. 어떤 상황에서 종료합니까?
Allen George

3
데몬 이외의 모든 스레드가 정상적으로 완료되도록 하시겠습니까?
Thorbjørn Ravn Andersen

답변:


192

System.exit()이 목적으로 사용할 수 있습니다 .

오라클의 Java 8 설명서에 따르면 :

public static void exit(int status)

현재 실행중인 Java Virtual Machine을 종료합니다. 인수는 상태 코드 역할을합니다. 일반적으로 0이 아닌 상태 코드는 비정상 종료를 나타냅니다 .

이 메소드는 런타임 클래스에서 exit 메소드를 호출합니다. 이 메소드는 정상적으로 리턴되지 않습니다.

통화 System.exit(n)는 실제로 통화 와 동일합니다.

Runtime.getRuntime().exit(n)


102
System.exit(0);

"0"은 프로그램을 호출 한 사람이 모든 것이 정상임을 알 수 있습니다. 그러나 오류로 인해 종료 System.exit(1);되는 경우 특정 오류에 해당하는 0이 아닌 다른 숫자 를 사용해야 합니다.

또한 다른 사람들이 언급했듯이 먼저 청소하십시오! 여기에는 파일 및 기타 열린 리소스를 닫는 것이 포함됩니다.


System.exit (1)이라고 생각 했습니까?
AFK

14
Chris가 말했듯이 오류 System.exit(1)(또는 다른 숫자)는 오류로 인해 닫 혔음을 나타냅니다. System.exit(0)프로그램이 정상적으로 종료되었음을 나타냅니다. 1을 원하는 숫자로 변경할 수도 있고 스크립트에서 응용 프로그램을 실행할 때 오류가 있는지 확인할 수 있습니다.
StormPooper

10

System.exit(int i)이다 사용되는,하지만 난 더 일반적인 내부를 포함 할 것이다 shutdown()당신이, 소켓 연결, 파일 기술자를 닫는 아니라 "정리"단계를 포함 할 방법, 다음 으로 종료를 System.exit(x).


6

System.exit() 일반적으로 가장 좋은 방법은 아니지만 응용 프로그램에 따라 다릅니다.

애플리케이션을 종료하는 일반적인 방법은 main()메소드 를 종료하는 것입니다. 그래픽 사용자 인터페이스 (AWT, Swing 등)가있는 응용 프로그램의 경우와 같이 다른 비 데몬 스레드가 실행중인 경우에는 작동하지 않습니다. 이러한 응용 프로그램의 경우 GUI 이벤트 루프를 종료하는 방법을 찾거나 (AWT 또는 Swing에서 가능한지 알 수 없음) 호출하십시오 System.exit().


4

사용 dispose();은 프로그램을 닫는 데 매우 효과적인 방법입니다.

사용 System.exit(x)하면 상호 작용 창이 재설정되고 해당 정보가 모두 사라진다고 가정합니다.


3

Jon에 동의하고 응용 프로그램이 무언가에 반응하게하고 System.exit ()를 호출하십시오.

다음을 확인하십시오.

  • 적절한 종료 값을 사용하십시오. 0은 정상적인 종료입니다. 다른 것은 오류가 있음을 나타냅니다.
  • 모든 입력 및 출력 스트림을 닫습니다. 파일, 네트워크 연결 등
  • 특히 오류로 인해 종료 이유를 기록하거나 인쇄합니다.

2

답은 System.exit ()이지만 프로그램이 중단되면 좋지 않습니다. 청소, 파괴하려는 의도는 없습니다.


1

질문에 대한 두 가지 간단한 답변이 있습니다.

이것이 "전문적인 방법"입니다 :

//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 }
ycomp

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

1
더 나은 : Runtime.getRuntime (). halt (0); 스칼라 내에서 완벽하게 일했습니다!
Gerhard Hagerer

@ GerhardHagerer 그러나 현재 런티를 얻지 못하면 어떻게됩니까?
Dude Bro

1
Javadoc에서 halt: "이 방법은 매우주의해서 사용해야합니다. exit방법 과 달리이 방법으로 종료 후크가 시작되지 않고 종료시 종료가 활성화 된 경우 호출되지 않은 종료자를 실행하지 않습니다. 종료 순서가있는 경우 이미 시작된 경우이 방법은 실행중인 종료 후크 또는 종료자가 작업을 완료 할 때까지 기다리지 않습니다. " 요컨대,을 사용할 필요 halt가 없으며을 선호해야합니다 exit.
Erwin Bolwidt

-1

System.exit()당신이 원하는 것을 할 것입니다. 그러나 대부분의 경우 스레드를 종료하고 기본 스레드를 활성 상태로 두려고 할 수 있습니다. 이렇게하면 작업을 종료 할 수 있지만 앱을 다시 시작하지 않고도 다른 작업을 시작할 수 있습니다.



-3

올바른 방법으로 수행해야합니다.

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();
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.