में मैं एक अपवाद है कि मैं e.getCause()
मुद्रित कर सकते हैं, यह हमेशा होता है, हालांकि null
पकड़ने पर देख सकते हैं।सेटिंग अपवाद कारण जावा
मैं इसे कहीं स्थापित करने के लिए की जरूरत है, या लापता कुछ जो कारण शून्य पर सेट कर रहा है है?
में मैं एक अपवाद है कि मैं e.getCause()
मुद्रित कर सकते हैं, यह हमेशा होता है, हालांकि null
पकड़ने पर देख सकते हैं।सेटिंग अपवाद कारण जावा
मैं इसे कहीं स्थापित करने के लिए की जरूरत है, या लापता कुछ जो कारण शून्य पर सेट कर रहा है है?
एक अपवाद विशेषताओं 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
दोनों संदेशों शामिल किए गए हैं चल रहा है।
वर्ग Exception
कंस्ट्रक्टर्स कि एक cause
फेंकने योग्य ले है। आपको उन रचनाकारों को कॉल करने या अपने कस्टम अपवाद वर्गों को कन्स्ट्रक्टर प्रदान करने की आवश्यकता है जो इन सुपर कन्स्ट्रक्टर को कॉल करते हैं।
getCause - इस फेंकने योग्य या नल के कारण वापस लौटाता कारण मौजूद नहीं है या अज्ञात है। (कारण फेंकने योग्य है कि वजह से इस फेंकने योग्य फेंक दिया पाने के लिए है।)
जावा दस्तावेज़ पढ़ें: getCause
कारण आम तौर पर अपवाद के निर्माता में सेट है। public Exception(String message, Throwable cause) पर देखें।
यह निर्माता में सेट नहीं है, तो आप initCause() कॉल कर सकते हैं।
क्या एक अपवाद प्रदर्शित करना संभव है जो अतिरिक्त कारण के अतिरिक्त स्टैक ट्रेस दिखा रहा है? क्या वह नहीं है कि विक वास्तव में क्या पूछ रहा था? वह नहीं पूछ रहा था: संदेश का कारण दिखाएं, वह पूछ रहा था: अपवाद का कारण दिखाएं। – djangofan
@djangofan - मैंने अपने उत्तर में कुछ पंक्तियां जोड़ दी हैं। आशा करता हूँ की ये काम करेगा। –