2010-07-04 12 views
6

मैं किसी भी प्रकार के अपवाद के दौरान उपयोगकर्ता के अनुकूल संदेश आने के लिए एक कस्टम अपवाद का उपयोग करना चाहता हूं।इंटरसेप्टिंग अपवाद

ऐसा करने का एक अच्छा सीधा तरीका क्या है? क्या स्विंग के ईडीटी में हस्तक्षेप से बचने के लिए मुझे कोई अतिरिक्त सावधानी बरतनी चाहिए?

उत्तर

6

अपवाद अनुवाद:

यह एक अच्छा विचार संदेशों अंतिम उपयोगकर्ता तक कोई अर्थ नहीं के साथ अपने आवेदन को दूषित नहीं करने के लिए है, लेकिन बजाय सार्थक अपवाद और संदेश है कि अपवाद अनुवाद करेगा बनाने/त्रुटि है कि आपके ऐप के कार्यान्वयन में कहीं गहरा हुआ।

@ रोमैन की टिप्पणी के अनुसार, आप निचले स्तर के अपवाद का ट्रैक रखने के लिए Exception(Throwable cause) कन्स्ट्रक्टर का उपयोग कर सकते हैं।

Effective Java 2nd Edition से

, मद 61:

[...] उच्च स्तर निचले स्तर अपवादों को पकड़ने चाहिए और, उनके जगह में, अपवाद हो सकता है फेंक higher- के रूप में समझाया स्तर अमूर्तता। यह मुहावरा अपवाद अनुवाद के रूप में जाना जाता है:

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

और आपके जीयूआई में आप 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)); 
} 
संबंधित मुद्दे