2010-07-04 4 views
6

모든 예외를 제외하고 사용자 친화적 인 메시지를 표시하려면 사용자 지정 예외에 사용하고 싶습니다.예외 차단하기

이 작업을 수행하는 가장 좋은 방법은 무엇입니까? Swing의 EDT를 방해하지 않도록주의해야합니까?

답변

6

예외 번역 :

그것은 최종 사용자에게 아무런 의미가없는 메시지와 함께 응용 프로그램을 오염시키지하는 것이 좋습니다, 대신 예외를 변환합니다 의미있는 예외 메시지를 생성/오류가 앱 구현의 어딘가에서 일어났습니다.

@ Romain의 설명에 따르면 Exception(Throwable cause) 생성자를 사용하여 하위 수준의 예외를 추적 할 수 있습니다. Effective Java 2nd Edition에서

, 항목 61 :

[...] 낮은 수준의 예외를 포착하고, 자신의 장소에서 수 있습니다 예외가 발생한다 상위 계층은 상위 -의 관점에서 설명 레벨 추상화. 이 관용구는 예외 번역으로 알려져 있습니다 :

// Exception Translation 
    try { 
     // Use lower-level abstraction to do our bidding 
     ... 
    } catch(LowerLevelException e) { 
     throw new HigherLevelException(...); 
    } 
+2

+1 원래 예외와 전체 스택 추적을 볼 수 있도록 새 예외 생성자를 전달하십시오. –

2

당신은 자신을 관리하지 않은 모든 예외를 캐치하는 java.lang.Thread.UncaughtExceptionHandler을 사용할 수 있습니다

import java.lang.Thread.UncaughtExceptionHandler; 

    public class MyUncaughtExceptionHandler implements UncaughtExceptionHandler { 

    public void uncaughtException(Thread t, Throwable e) { 
     Frame.showError("Titel", "Description", e, Level.WARNING); 
     e.printStackTrace(); 
    } 
} 

앱에 등록합니다 :

public static void main(String[] args) { 
    Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler()); 
} 

그리고 GUI에서 org.jdesktop.swingx.JXErrorPaneSwingX에서 사용하면 사용자에게 예외에 대해 알리는 멋진 오류 팝업.

public static void showError(String title, String desc, Throwable e, 
     Level level) { 
    JXErrorPane.showDialog(this, new ErrorInfo(title, 
      desc, null, null, e, level, null)); 
}