2012-03-22 16 views
17

में अपवाद के बाद निरंतर निष्पादन फेंक दिया गया है, मैं एक अपवाद फेंकने की कोशिश कर रहा हूं (कोशिश करने के लिए प्रयास ब्लॉक का उपयोग किए बिना) और मेरा प्रोग्राम अपवाद फेंकने के ठीक बाद खत्म हो जाता है। क्या कोई तरीका है कि अपवाद फेंकने के बाद, फिर मेरे कार्यक्रम को निष्पादित करना जारी रखें? मैंने अमान्यEmployeeTypeException फेंक दिया जिसे मैंने किसी अन्य वर्ग में परिभाषित किया है, लेकिन मैं इसे फेंकने के बाद प्रोग्राम जारी रखना चाहता हूं।जावा

private void getData() throws InvalidEmployeeTypeException{ 

    System.out.println("Enter filename: "); 
    Scanner prompt = new Scanner(System.in); 

    inp = prompt.nextLine(); 

    File inFile = new File(inp); 
    try { 
     input = new Scanner(inFile); 
    } catch (FileNotFoundException ex) { 
     ex.printStackTrace(); 
     System.exit(1); 
    } 

    String type, name; 
    int year, salary, hours; 
    double wage; 
    Employee e = null; 


    while(input.hasNext()) { 
     try{ 
     type = input.next(); 
     name = input.next(); 
     year = input.nextInt(); 

     if (type.equalsIgnoreCase("manager") || type.equalsIgnoreCase("staff")) { 
      salary = input.nextInt(); 
      if (type.equalsIgnoreCase("manager")) { 
       e = new Manager(name, year, salary); 
      } 
      else { 
       e = new Staff(name, year, salary); 
      } 
     } 
     else if (type.equalsIgnoreCase("fulltime") || type.equalsIgnoreCase("parttime")) { 
      hours = input.nextInt(); 
      wage = input.nextDouble(); 
      if (type.equalsIgnoreCase("fulltime")) { 
       e = new FullTime(name, year, hours, wage); 
      } 
      else { 
       e = new PartTime(name, year, hours, wage); 
      } 
     } 
     else { 


      throw new InvalidEmployeeTypeException(); 
      input.nextLine(); 

      continue; 

     } 
     } catch(InputMismatchException ex) 
      { 
      System.out.println("** Error: Invalid input **"); 

      input.nextLine(); 

      continue; 

      } 
      //catch(InvalidEmployeeTypeException ex) 
      //{ 

      //} 
     employees.add(e); 
    } 


} 

उत्तर

4

इस प्रयास करें:

try 
{ 
    throw new InvalidEmployeeTypeException(); 
    input.nextLine(); 
} 
catch(InvalidEmployeeTypeException ex) 
{ 
     //do error handling 
} 

continue; 
+25

क्या आपको नहीं लगता कि यह अपवादों का उपयोग करने का एक अच्छा उदाहरण नहीं है? – manub

+1

यह पूरी तरह से काम किया। मैं त्रुटि प्रबंधन का ख्याल रखने में सक्षम था और निष्पादन जारी रखता हूं –

+0

मुझे यह समझने में थोड़ी देर लग गई कि यह कोड विनम्र रूप से phrased उद्घाटन टिप्पणी में 'अच्छा उदाहरण नहीं है' क्यों है। 'input.nextLine(); 'कभी निष्पादित नहीं किया जाता है। – Reg

30

आप अपवाद हैं, तो विधि निष्पादन बंद हो जाएगा और अपवाद फोन करने वाले विधि के लिए फेंक दिया है। throw हमेशा मौजूदा विधि के निष्पादन प्रवाह को बाधित करता है। try/catch ब्लॉक ऐसा कुछ है जिसे आप लिख सकते हैं जब आप एक अपवाद फेंक सकते हैं, लेकिन अपवाद फेंकने का मतलब है कि असामान्य स्थिति के कारण विधि निष्पादन समाप्त हो गया है, और अपवाद उस स्थिति के कॉलर विधि को सूचित करता है।

अपवाद के बारे में इस ट्यूटोरियल का पता लगाएं और वे कैसे काम करते - http://docs.oracle.com/javase/tutorial/essential/exceptions/

4

आप एक विधि है कि आप एक त्रुटि फेंक करना चाहते हैं, लेकिन आप में कुछ सफाई करना चाहते हैं तो आपके विधि पहले से ही आप कोड डाल सकते हैं जो अपवाद को एक ब्लॉक ब्लॉक के अंदर फेंक देगा, फिर कैच ब्लॉक में क्लीनअप डालें, फिर त्रुटि फेंक दें।

try { 

    //Dangerous code: could throw an error 

} catch (Exception e) { 

    //Cleanup: make sure that this methods variables and such are in the desired state 

    throw e; 
} 

इस तरह आज़माएं/कैच ब्लॉक वास्तव में त्रुटि से निपटने नहीं है लेकिन यह आप से पहले विधि समाप्त हो जाता है और अभी भी सुनिश्चित करता है कि त्रुटि फोन करने वाले को दिया जाता है सामान करने के लिए समय देता है।

इसका एक उदाहरण होगा यदि विधि में एक चर बदल गया है तो वह चर एक त्रुटि का कारण था। चर को वापस करने के लिए वांछनीय हो सकता है।