2013-03-26 1 views
1

나는 오랫동안 내 머리카락을 긁어내어 찾을 수없는 오류가 발생했습니다. 그것은 성격 예외로 밝혀졌지만 분명히 EDT에서 일어 났기 때문에 그것을 볼 수 없었습니다. 터미널에서 실행될 때 "lein run"터미널에 표시되지 않고 Emacs에서 실행할 때 이맥스 버퍼에 표시되지 않습니다. 나는 결국 아주 긴 시간 후EDT에서 Clojure 예외 알림을받는 방법은 무엇입니까?

이 일을 : 나는했습니다 따라서

#<ArityException clojure.lang.ArityException: wrong number of args passed to... 

과 : 마지막으로,이 덕분에

(try (function-call-with-arity-error ...) (catch Exception e (println e) 

을하고,이 인쇄 볼 수있어 내 오류를 찾을 수있었습니다.

그리고 나는이 할 경우 : 다음를 "... 시도"터미널 인쇄물을

(do 
    (println "trying...") 
    (arity-error-here-on-purpose) ; this ones throws the arity error 
    (println "done") 
) 

을하지만 에 도달하지 "완료 ...".

기본 캐치되지 않는 예외 처리기를 설정하려고 시도했습니다. 예외가 포착되지 않습니다. 그것은 마치 프로그램이나 EDT가 (아무데도 아무 것도 인쇄하지 않고) arity 예외 뒤에 "붙어있는"것처럼 보입니다.

다음에이 문제를 어떻게 처리해야합니까? 어디서나 어떤 메시지도 볼 수 없었기 때문에 찾을 시간이 오래 걸렸습니다. 다시 한번 : 'lein run'터미널에는 아무것도없고 Emacs 버퍼에는 아무것도 없다.

try/catch 내부에서 EDT에서 발생해야하는 호출을 수동으로 래핑 한 다음 그 예외를 기록하거나/println 예외를 기록해야합니까?

이 코드는 비교적 긴 "Clojure"응용 프로그램에 있습니다 : 1000 줄의 코드는 여기에 붙여 넣을 수 없기 때문에 짧은 예제에서 그 동작을 재현 할 수는 없습니다.하지만 일관되게 발생합니다. 앱).

+1

도움이 될 수 있습니다. http://stackoverflow.com/questions/4448523/how-can-i-catch-event-dispatch-thread-edt-exceptions – svk

답변

0

EDT에서 발생할 수있는 모든 호출을 래핑 할 필요가 없도록 검색되지 않는 예외 처리기를 스레드에 등록 할 수 있습니다.

동부 서머 타임 하나를 등록이 당신에게 원하는 동작을 제공하는 경우보고보십시오

.

+0

도와 주셔서 감사합니다. 방금 시도했는데 작동하지 않습니다 : 그것은 EDT가 arity 예외 바로 뒤에 잠겨져 있고 잡히지 않은 예외 처리기가 예외를 catch하지 않는 것입니다 (다른 스레드에서 다른 예외를 시도했지만 처리기가 catch 중임). 그들 잘). –

관련 문제