문제

여러 가지 이유로 자바 애플리케이션 을 작성할 때 System.exit를 호출하는 것이 눈살을 찌푸리는 데, 모든 것이 계획대로 진행되지 않는다는 것을 호출 프로세스에 어떻게 알릴 수 있습니까?

수정 : 1은 0이 아닌 모든 종료 코드에 대한 유전자 태그 코드입니다.

도움이 되었습니까?

해결책

'애플리케이션'이 실제로 더 큰 자바 애플리케이션 (서버)의 하위 애플리케이션 (예 : 서블릿, 애플릿) 일 때 System.exit의 사용은 눈살을 찌푸립니다.이 경우 System.exit는 JVM을 중지시킬 수 있으므로 다른 모든하위 응용 프로그램.이 상황에서는 애플리케이션 프레임 워크 / 서버에서 포착하고 처리 할 수있는 적절한 예외를 발생시키는 것이 최선의 선택입니다.

자바 애플리케이션이 실제로 독립형 애플리케이션으로 실행되도록 의도 된 경우 System.exit를 사용하는 데 아무런 문제가 없습니다.이 경우 종료 값을 설정하는 것이 실패 또는 성공을 상위 프로세스에 알리는 가장 쉬운 (또한 가장 많이 사용되는) 방법 일 것입니다.

다른 팁

' 예외 던지기 '군중에 동의합니다.한 가지 이유는 System.exit를 호출하면 다른 코드에서 사용할 수 있도록하려는 경우 코드를 사용하기 어렵 기 때문입니다.예를 들어, 클래스가 웹 앱이나 메시지를 소비하는 앱에서 유용하다는 사실을 알게 된 경우 이러한 컨테이너가 어떻게 든 실패를 처리 할 수있는 기회를 제공하는 것이 좋습니다.컨테이너는 작업을 재 시도하고, 문제를 기록하고 무시하고, 관리자에게 이메일을 보내는 등의 작업을 원할 수 있습니다.

예외는 main() 방법입니다.이것은 Exception을 트랩하고 호출 프로세스 또는 쉘 스크립트에서 인식 할 수있는 값으로 System.exit()를 호출 할 수 있습니다.

System.exit()는 차단하고이를 시작한 스레드가 종료 후크에서 사용되는 경우 교착 상태를 만듭니다.

웹 서블릿 환경에서도 위험하거나 문제가 될 수 있습니다.

예외를 던지는 것은 일반적으로 다른 대안으로 간주됩니다.

우리 회사의 정책은 System.exit (-1)을 호출하는 것이 좋지만 init () 메서드에서만 가능하다는 것입니다.프로그램의 정상적인 흐름에서 호출하기 전에 확실히 두 번 생각할 것입니다.

예외 발생은 특정 오류에 대한 정보를 앱 외부로 보내는 가장 좋은 방법입니다.

숫자는 다음과 같은 정보를 제공하지 않습니다. 라코 디스

(또는 그에 가까운 것)

정상 출구로 인해 눈살을 찌푸립니다."모든 것이 계획대로 진행되지 않는 경우"System.exit는 괜찮습니다.

업데이트 : 귀하의 '1'이 어딘가에 문서화 된 의미를 가지고 있다고 가정합니다.

예외를 던지는 것은 무언가 잘못되었을 때해야 할 일이라고 생각합니다.이렇게하면 애플리케이션이 독립 실행 형 앱으로 실행되지 않는 경우 호출자가 이에 반응하고 무엇이 잘못되었는지에 대한 정보를 얻을 수 있습니다.스택 추적을 볼 때 무엇이 잘못되었는지 더 잘 알 수 있기 때문에 디버깅 목적으로도 더 쉽습니다.

한 가지 중요한 점은 예외가 최상위 수준에 도달하여 VM이 종료되게하면 VM이 반환 코드 1을 반환하므로 반환 코드를 사용하는 외부 응용 프로그램에서 문제가 있음을 알 수 있다는 것입니다.

System.exit ()가 의미가 있다고 생각하는 유일한 경우는 앱이 Java가 아닌 응용 프로그램에서 호출되므로 앱이 작동하는지 여부를 확인하기 위해 반환 코드를 사용해야하며 원하는 경우입니다.응용 프로그램이 잘못된 일에 대해 다르게 반응 할 수있는 기회를 가질 수 있습니다. 즉, 다른 반환 코드가 필요합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top