2010-07-04 14 views
6

Vorrei utilizzare un'eccezione personalizzata per visualizzare un messaggio intuitivo quando si verifica un'eccezione di qualsiasi tipo.Intercettare eccezioni

Qual è un buon modo semplice per farlo? Ci sono precauzioni extra che dovrei prendere per evitare di interferire con l'EDT di Swing?

risposta

6

Eccezione Traduzione:

E 'una buona idea quella di non inquinare l'applicazione con i messaggi che non hanno alcun significato per l'utente finale, ma invece di creare Eccezioni significative e messaggi che si tradurranno l'eccezione/errore è successo da qualche parte nell'implementazione della tua app.

Come per il commento di @ Romain, è possibile utilizzare il costruttore Exception(Throwable cause) per tenere traccia dell'eccezione di livello inferiore.

Da Effective Java 2nd Edition, Articolo 61:

[...] strati superiori dovrebbe interferire eccezioni di livello inferiore e, nella loro luogo, generare eccezioni che possono essere spiegate in termini di superiore che livello astrazione. Questo linguaggio è conosciuto come traduzione eccezione:

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

+1 Assicurati di passare l'eccezione originale al costruttore di quello nuovo in modo da poter vedere l'intera traccia dello stack e la causa originale. –

2

È possibile utilizzare java.lang.Thread.UncaughtExceptionHandler che cattura tutte le eccezioni non si è curato di persona

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 nella vostra applicazione:

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

e nella GUI è possibile utilizzare org.jdesktop.swingx.JXErrorPane da SwingX per mostrare un bel popup di errore, che informa l'utente sulle eccezioni.

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