2011-04-27 14 views
23

में मैं एक अपवाद है कि मैं e.getCause() मुद्रित कर सकते हैं, यह हमेशा होता है, हालांकि null पकड़ने पर देख सकते हैं।सेटिंग अपवाद कारण जावा

मैं इसे कहीं स्थापित करने के लिए की जरूरत है, या लापता कुछ जो कारण शून्य पर सेट कर रहा है है?

उत्तर

49

एक अपवाद विशेषताओं message और cause है। संदेश एक विवरण है, जो मानव पाठक को कम या ज्यादा सटीक बता रहा है, क्या गलत हुआ। cause कुछ अलग है: यह है, यदि उपलब्ध हो, एक और (नेस्टेड) ​​Throwable

अवधारणा अक्सर प्रयोग किया जाता है अगर हम इस तरह कस्टम अपवाद का उपयोग करें:

catch(IOException e) { 
    throw new ApplicationException("Failed on reading file soandso", e); 
    //       ^Message      ^Cause 
} 

संपादित करें - @djangofans टिप्पणी के जवाब में।

मानक यह है कि नेस्टेड अभिव्यक्ति (कारण) इसके स्टैक ट्रेस के साथ भी मुद्रित होती है।

इस छोटे से आवेदन

public class Exceptions { 
    public static void main(String[] args) { 
     Exception r = new RuntimeException("Some message"); 
     throw new RuntimeException("Some other message", r); 
    } 
} 

इच्छा उत्पादन

Exception in thread "main" java.lang.RuntimeException: Some other message 
    at Exceptions.main(Exceptions.java:4) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 
Caused by: java.lang.RuntimeException: Some message 
    at Exceptions.main(Exceptions.java:3) 
    ... 5 more 

दोनों संदेशों शामिल किए गए हैं चल रहा है।

+0

क्या एक अपवाद प्रदर्शित करना संभव है जो अतिरिक्त कारण के अतिरिक्त स्टैक ट्रेस दिखा रहा है? क्या वह नहीं है कि विक वास्तव में क्या पूछ रहा था? वह नहीं पूछ रहा था: संदेश का कारण दिखाएं, वह पूछ रहा था: अपवाद का कारण दिखाएं। – djangofan

+0

@djangofan - मैंने अपने उत्तर में कुछ पंक्तियां जोड़ दी हैं। आशा करता हूँ की ये काम करेगा। –

2

वर्ग Exception कंस्ट्रक्टर्स कि एक cause फेंकने योग्य ले है। आपको उन रचनाकारों को कॉल करने या अपने कस्टम अपवाद वर्गों को कन्स्ट्रक्टर प्रदान करने की आवश्यकता है जो इन सुपर कन्स्ट्रक्टर को कॉल करते हैं।

2

getCause - इस फेंकने योग्य या नल के कारण वापस लौटाता कारण मौजूद नहीं है या अज्ञात है। (कारण फेंकने योग्य है कि वजह से इस फेंकने योग्य फेंक दिया पाने के लिए है।)

जावा दस्तावेज़ पढ़ें: getCause

संबंधित मुद्दे