2012-02-16 8 views
9

मैं एक असाइनमेंट के लिए एक ग्रेडिंग प्रोग्राम लिख रहा हूं जिसमें छात्र रिकर्सिव सॉर्ट एल्गोरिदम लागू कर रहे हैं। इसका मतलब है कि कई छात्र शायद टूटे हुए कोड में बदल जाएंगे जो स्टैक ओवरफ्लो का कारण बनता है। मैं किसी भी तरह से स्टैक ओवरफ्लो पकड़ना चाहता हूं जो छात्र कोड को कॉल करते समय होते हैं, इसलिए मैं उनके स्कोर से कटौती कर सकता हूं और अन्य परीक्षणों पर जारी रख सकता हूं। दुर्भाग्यवश, स्टैक ओवरफ़्लो अन्य अपवादों के मानक पथ से नहीं प्रतीत होता है - कोशिश करने/पकड़ने वाले ब्लॉक मदद करने के लिए प्रतीत नहीं होते हैं। क्या स्टैक ओवरफ़्लो होने के बाद मेरे कोड पर निष्पादन वापस करने का कोई तरीका है? मैंने ऐसा करने के लिए धागे का उपयोग करने में देखा है, लेकिन ऐसा लगता है कि कोशिश/पकड़ का उपयोग करने में सक्षम नहीं है।जावा में स्टैक ओवरफ़्लो से मैं कैच और पुनर्प्राप्ति कैसे करूं?

उत्तर

14

अपने छात्रों के तरीकों को कॉल करते समय, आपको कॉल-कैच ब्लॉक में कॉल एम्बेड करना चाहिए और Exception एस Throwables पर पकड़ना चाहिए।

निम्नलिखित कोड देखें:

 
public class Test { 
    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     try { 
      soe(); 
     } catch (Throwable e) { 
      System.out.println("Caught:" + e 
        + ", everything went better than expected."); 
     } 
    } 
    /** 
    * Method producing StackOverflowError 
    */ 
    public static void soe() { 
     soe(); 
    } 
} 

अधिक जानकारी

जब पकड़ने Throwable रों तुम्हें पकड़ होगा:

  • सामान्य Exception रों - जो लागू आप उपयोग करना try-catch या throws (उदाहरण के लिए IOException)
  • RuntimeException एस - जो विधियों के माध्यम से बुलबुला (उदाहरण के लिए। NullPointerException)
  • Error एस - उदाहरण के लिए। StackOverflowError

Throwable वस्तु

+1

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

+0

@ इब्राहिम संक्षिप्त: मूल बातें इंगित करने के लिए धन्यवाद। यह – Jayy

+0

उत्कृष्ट, धन्यवाद में मदद करता है! – Solaraeus

2

आप एक नए Process का उपयोग करके अपने प्रोग्राम को बंद कर सकते हैं और फिर स्टैक ओवरफ़्लो की जांच के लिए अपनी त्रुटि स्ट्रीम को रीडायरेक्ट कर सकते हैं।

+0

इसके लिए कोई आवश्यकता नहीं है - नीचे मटिया का जवाब देखें। –

1

पर official Java Docs देखें आप एक अलग JVM में प्रत्येक कार्यक्रम चलाने की कोशिश कर सकते हैं।

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