Java UncaughtExceptionHandler 인터페이스

2146 단어 자바
UncaughtExceptionHandler 인 터 페 이 스 는 실행 중 프로그램 에 이상 이 포착 되 지 않 았 습 니 다.
아래 의 예 와 같다.

		for (int i=5;i >=0 ;i--) {
			int value = 5 / i;
			System.out.println(value);
		}

main 방법 에서 직접 실행 하면 console 에서 틀 리 지 않 습 니 다.
그러나 코드 를 자세히 보면 i 가 0 일 때 이 코드 는 Arithmetic Exception 을 던 져 야 합 니 다. 왜 없 는 지, 프로그램 에 이상 이 없 기 때 문 입 니 다 catch.
하면, 만약, 만약...

		Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {

			public void uncaughtException(Thread t, Throwable e) {
				e.printStackTrace();
			}} );

다시 실행 하면 콘 솔 이 나타 납 니 다.
예외 스 레 드 "main"java. lang. ArithmeticException:/by zero information.
스 레 드 가 있 는 상황 에서주 스 레 드 에 대해 서 는 Thread 의 이상 을 포착 할 수 없습니다.

	static class Task implements Runnable {

		@Override
		public void run() {
			for (int i=5;i >=0 ;i--) {
				int value = 5 / i;
				System.out.println(value);					
			}
		}
	}

		try {
			Thread unCaughtableThread = new Thread(new Task());
			unCaughtableThread.start();
		} catch (Exception e) {
			System.out.print("can do somthing");//    
                        e.printStackTrace();
		}

하면, 만약, 만약...

		try {
			Thread caughtableThread = new Thread(new Task());
			caughtableThread.setUncaughtExceptionHandler(new SimpleUncaughtExceptionHandler());
			caughtableThread.start();
		} catch (Exception e) {
			System.out.print("can do somthing");//       
			e.printStackTrace();
		}

	static class SimpleUncaughtExceptionHandler implements UncaughtExceptionHandler {

		@Override
		public void uncaughtException(Thread t, Throwable e) {
			System.err.println(t.getName() + "  " +e.getMessage());//       。
			e.printStackTrace();
		}
	}

좋은 웹페이지 즐겨찾기