2012-04-14 1 views
0

체크되지 않은 예외가 메인에서 제외되면 항상 프로그램이 다운되지 않습니다. 나는 GUI를 실행하고 있기 때문에 묻습니다. 현재 프로그램을 중단시키지 않습니다. 그들은 정상적으로 충돌합니까, 아니면 특정 상황에서만 충돌합니까? 체크 된 예외와 GUI가 같을 까?Java 외부에서 체크되지 않은 예외가 발생했습니다.

스택 오버플로가 나를 추락하여이 질문이 두 번 게시되었다는 것을 알지 못 했으므로 두 개의 복사본이있는 것이 틀림 없습니다. 이것은 같은 질문입니다.

답변

5

확인되지 않은 예외가 확인되면 주 스레드가 충돌합니다. 그러나 JVM이 종료된다는 것을 의미하지는 않습니다. 비 데몬 스레드가 실행되고 있지 않으면 JVM이 종료됩니다. GUI 응용 프로그램을 실행하는 경우 UI 이벤트 루프는 비 데몬 스레드이며 완료 될 때까지 JVM을 계속 실행합니다.

+0

그래서 주 스레드가 종료되면 예외가 발생하는지 여부를 검사할지 여부를 무시할지 여부가 무시됩니다. – rubixibuc

+0

무시되지 않습니다. 그것은 당신의 주 스레드를 충돌합니다. 주 스레드 실행은 예외를 throw하는 지점에서 중단되고 비정상적으로 종료됩니다 (JLS 용어에서). 또한 주 스레드에서 예외를 발생시키는 경우에는 체크 된 예외를 선언해야합니다. 예 : public static void main (String ... args) 예외를 발생시킵니다. –

+0

GUI를 작성한 후에 주 스레드가 종료되지 않고 수행해야하는 다른 작업이없는 경우? 또는 주 스레드가 현재 실행중인 스레드를 참조하고 있다고 말할 때? 주 방법에서 실행되는 스레드가 아닙니다. – rubixibuc

1

체크 아웃 예외가 발생하면 프로그램을 중단시키지 않습니다. JVM이 심각한 내부 오류가 발생하고 레지스터 내용과 파일에 다른 애매한 물건의 모든 종류를 포함하는 크래시 덤프를 출력 할 때 기술적 인 의미에서

는 충돌이 발생합니다.

캐치되지 않은 예외로 인해 주 스레드가 종료되면 충돌이 발생하지 않습니다. 그것은 (JVM의 관점에서) 정상적인 종료입니다.

Chandra의 대답은 정상적으로 JVM 종료가 어떻게 발생하는지 설명하지만 System.exit()을 호출하는 것이 정상 종료를 시작하는 다른 방법이라고 언급하지는 않았지만 설명합니다.

0

메인 메서드의 모든 코드를 try-catch (Throwable t)로 래핑하십시오. 그것은 모든 것을 잡습니다.

관련 문제