2010-06-14 5 views
8

मैं कुछ मल्टी-थ्रेडेड कोड बनाने रहा हूँ में एक बिना क्रिया का अपवाद अनुकरण करने के लिए कैसे, और मैं एक JobDispatcher वर्ग कि धागे बनाता है बनाया है। मैं कैसे की विधि रन() में एक बिना क्रिया का अपवाद उत्पन्न कर सकते हैं - मैं इस वस्तु कार्यकर्ता धागे में किसी भी बिना क्रिया अपवाद हैंडल करना चाहते हैं, और इसलिए मैंजावा

Thread.setUncaughtExceptionHandler(this); 

उपयोग कर रहा हूँ अब, मैं इस कार्यक्षमता का परीक्षण करना चाहते हैं मेरे कार्यकर्ता वस्तु?

उत्तर

14

बस कोई अपवाद फेंक दें।

उदा .:

throw new RuntimeException("Testing unhandled exception processing."); 

पूरा:

public class RuntimeTest 
{ 
    public static void main(String[] a) 
    { 
    Thread t = new Thread() 
    { 
     public void run() 
     { 
     throw new RuntimeException("Testing unhandled exception processing."); 
     } 
    }; 
    t.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() 
    { 
     public void uncaughtException(Thread t, Throwable e) 
     { 
     System.err.println(t + "; " + e); 
     } 
    }); 
    t.start(); 
    } 
} 
+0

ग्रहण मुझे संकलन जब मैं यह कर नहीं दूँगा - यह कहना है मैं ट्राई/कैच के साथ चारों ओर। क्या आप जानते हैं कि इस व्यवहार को कैसे बदला जाए? –

+1

इसे संकलित करना चाहिए। कुछ ग्रहण-विशिष्ट अतिरिक्त जांच की तरह दिखता है। –

+1

यदि आप अपवाद का फेंकने के बाद एक विधि में अन्य कोड है ग्रहण शिकायत हो सकती है, यह विधि यह है में केवल/अंतिम पंक्ति बनाते हैं। – Alb

5

क्या सिर्फ एक अपवाद फेंकने के साथ समस्या यह है:

throw new Exception("This should be unhandled"); 

अपने रन विधि के अंदर। और निश्चित रूप से, इसे पकड़ नहीं है। यह आपके हैंडलर ट्रिगर करना चाहिए।

4

आप कुछ अनियंत्रित अपवाद फेंक चाहिए। एक अनचेक अपवाद के लिए आपके कोड को संभालने की आवश्यकता नहीं होती है, और इसलिए कॉल स्टैक को कम करने के लिए एक अच्छा उम्मीदवार है।

उदाहरण के लिए आप RuntimeException, या AssertionError की तरह कुछ भी चुन सकते हैं, यदि आप संभावना है कि कोड के कुछ हिस्से अपवाद लग जाती है और यह संभालती है इससे पहले कि यह अपने हैंडलर तक पहुँच जाता है कम करना चाहते हैं।

0

सिर्फ इस कोड जोड़ सकते हैं और आप फाहा त्रुटि के बिना अपवाद बिना क्रिया मिलेगा:

int i = 1/0;