2012-12-22 13 views
23

मैं जावा के लिए नया हूं और प्रोग्रामिंग के लिए नया हूं (मुझे पता है कि सीधे जावा में डाइविंग शायद सबसे बड़ा विचार नहीं था।) और मुझे लगातार एक त्रुटि मिल रही है इससे कोई फर्क नहीं पड़ता कि मैं अपने प्रोग्राम में एक विराम जोड़ने की कोशिश करता हूं ।थ्रेड.sleep() पर कॉल पर अनचाहे अपवाद के लिए संकलन त्रुटि को कैसे ठीक करूं?

import java.lang.*; 

public class Counter 
{ 
    public static void main(String[]args) 
    { 
     int i; 

     for (i = 0; i <= 10; i++) 
     { 
      Thread.sleep(1000); 
      System.out.println(i); 
     } 
     System.out.println("You can count to ten."); 
    } 
} 

Thread.sleep() करने के लिए कॉल संकलन नहीं होगा: मैं एक साधारण गिनती कार्यक्रम कर रहा हूँ और प्रत्येक संख्या यहाँ जो एक सेकंड की देरी जोड़ना चाहते हैं कोड मैं अब तक है। javac संकलक कहते हैं, "असूचित अपवाद InterruptedException; पकड़ा जाना चाहिए या फेंक होने की घोषणा की" और ग्रहण कहते हैं, "क्रिया के अपवाद प्रकार InterruptedException"

+6

और क्या उस त्रुटि हो सकता है? –

+2

'थ्रेड.sleep()' के बाद से संकलित त्रुटि 'InterruptedException' फेंक सकती है। –

+2

@AndrewLogvinov - हाँ, * मुझे * पता है कि ... यह मुद्दा है कि प्रश्न में सुधार की जरूरत है;) –

उत्तर

56

Thread.Sleep एक InterruptedException जो एक जाँच अपवाद नहीं है फेंक कर सकते हैं। सभी चेक अपवादों को या तो पकड़ा और संभाला जाना चाहिए या अन्यथा आपको यह घोषणा करनी होगी कि आपकी विधि इसे फेंक सकती है। आपको यह करने की ज़रूरत है कि अपवाद वास्तव में फेंक दिया जाएगा या नहीं। एक चेक अपवाद की घोषणा नहीं कर रहा है कि आपकी विधि फेंक सकती है एक संकलन त्रुटि है।

try { 
    Thread.sleep(1000); 
} catch (InterruptedException e) { 
    e.printStackTrace(); 
    // handle the exception...   
    // For example consider calling Thread.currentThread().interrupt(); here. 
} 

या घोषणा करते हैं कि अपने विधि फेंक कर सकते हैं एक InterruptedException:

आप या तो इसे पकड़ने के लिए की जरूरत है

public static void main(String[]args) throws InterruptedException 

संबंधित

+0

+1 - सुझाव के साथ कि एक शुरुआत के लिए शायद अपवादों पर ऑरैक ट्यूटोरियल का एक लिंक और जावडोक राज्यों को इंगित करना जो एक विधि को अपवाद दे सकता है। (** संपादित करें: ** आपने मेरा दिमाग पढ़ा है) –

+0

धन्यवाद उत्तर देने के लिए चिह्नित करें लेकिन अब आपने मुझे आश्चर्यचकित कर दिया है कि मुझे पहले स्थान पर अपवाद घोषित करने की आवश्यकता क्यों होगी। ब्रायन, आप अपवादों पर ऑरैक ट्यूटोरियल का लिंक नहीं होगा? –

+0

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

-3

आप पहली पंक्ति से छुटकारा पा सकते। आप की जरूरत नहीं है import java.lang.*;

बस करने के लिए अपने 5 वीं लाइन बदलने के लिए:

public static void main(String [] args) throws Exception 
संबंधित मुद्दे