미래의 예외가 발견되기 어려울 때가 여러 번있었습니다 (그리고 이미 예외가 발생하지 않은 이유에 대해 이미 질문을 받았는데이 질문은 내 속행이 아닌 것입니다. 오래된 질문) "기본 잡히지 않는 예외 처리기"를 설정하기로 결정했습니다.defaultUncaughtExceptionHandler의 구체적인 예
하지만 제대로 작동하지 않습니다. 나는 reify를 사용해 보았고 프록시를 사용해 보았습니다. 마치 아무 일도 일어나지 않는 것입니다. 여기
문제 재생 최소한의 사건 : 나는에 println , 나는 음색을 사용하여 파일에 로그인 시도하려REPL> (Thread/setDefaultUncaughtExceptionHandler
(proxy [Thread$UncaughtExceptionHandler] []
(uncaughtException [thread throwable]
(do (println (-> throwable .getCause .getMessage))
; (error "whatever...") ; some 'timbre' logging if you have timbre
))))
nil
REPL> (future (do (Thread/sleep 100) (/ 0 0)))
#<[email protected]: :pending>
REPL>
를, 내가 임시 파일에 침을하려고, 나는에 미래를 강제로 시도 deref'ing에 의해 실행 ... 분명히 기본 uncaught 예외 처리기가 호출되지 않습니다.
아무도 나에게 대화 형/REPL 예를 표시 할 수 있습니다 작동하지 않는 캐치 예외 처리기 실제로 예외를 잡기?
보너스 질문 : 기본 캐치 예외 핸들러가 설정되고 나면 해당 설정을 "볼"수있는 쉬운 방법이 있습니까? REPL에서 그 기능을 테스트하고 setDefaultUncaughtExceptionHandler를 여러 번 호출하면 어떻게됩니까? 마지막 핸들러 만 고려 했습니까?
thx, 좀 더 명확하게 보는데 도움이되지만 ... 나는 물건들이 꽤 분리되어있어 대기열과 생산자/소비자를 광범위하게 사용하는 시스템을 가지고 있습니다. 그래서,이 경우에, 나는 큐에서 물건을 읽는 소비자 인 미래를 시작하고 있습니다. 그래서 저는 그 미래를 역설 할 필요가 없습니다. 이 경우 미래를 사용하는 것이 맞지 않습니까? 어떻게 연속적으로 실행되는 스레드를 실행하고 대기열을 사용하며 (응용 프로그램의 수명주기 동안 살아남 았는지) 어떻게해야합니까? 자바 토지로 돌아 가야할까요, 아니면 잘 작동하고 예외 사항을 잘 고려해야 할 clojure 추상화가 제공되어야합니까? –
아, 미래는 단지 불에 대한 설탕으로 좋으며 실을 잊어 버릴 것 같네요.자바 나 Clojure에서 이런 종류의 것을 처리하는 경향이있는 위의 포스트 스크립트를보십시오. 대기열 주위에 많은 제어 흐름이 발생하는 경우 core.async도 살펴보십시오. – pete23
+1, 다시 귀하의 도움에 감사드립니다 ... 나는 아마 당신이 제안하는 것과 같은 것을 할 것입니다. 나는 여전히 "누락 된"예외를보고하는 "쉬운"방법이 있었으면 좋겠다. 예를 들어 내 코드에서 어디에서 이러한 예외를 직접 처리해야하는지 판단 할 수있다. 그런데 마지막 라인에서 * (recur source sink) *를 의미하셨습니까? –