2010-07-04 11 views
6

Me gustaría utilizar una excepción personalizada para que aparezca un mensaje fácil de usar cuando se produce una excepción de cualquier tipo.Excepciones de interceptación

¿Cuál es una buena manera directa de hacer esto? ¿Hay alguna precaución adicional que deba tomar para evitar interferir con el EDT de Swing?

Respuesta

6

Excepción Traducción:

Es una buena idea para no contaminar su aplicación con los mensajes que no tienen significado para el usuario final, pero en su lugar crear excepciones significativas y mensajes que se traducirán la excepción/error sucedió en algún lugar en lo profundo de la implementación de tu aplicación.

Según el comentario de @ Romain, puede usar el constructor Exception(Throwable cause) para realizar un seguimiento de la excepción de nivel inferior.

De Effective Java 2nd Edition, artículo 61:

[...] capas superiores deben ponerse al excepciones de nivel inferior y, en su lugar , lanzar excepciones que pueden ser explicarse en términos de la de mayor nivel abstracción. Este idioma se conoce como traducción excepción:

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

+1 Simplemente asegúrese de pasar su excepción original al constructor de la nueva para que pueda ver el seguimiento completo de la pila así como la causa original. –

2

Usted puede utilizar java.lang.Thread.UncaughtExceptionHandler que captura todas las excepciones que no han cuidado de sí mismo

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(); 
    } 
} 

registrarlo en su aplicación:

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

y en su GUI puede usar org.jdesktop.swingx.JXErrorPane de SwingX para mostrar un nice popup de error, que informa al usuario sobre las excepciones.

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