Исключение Обработка Приключения III - Обновленный - PullRequest
0 голосов
/ 03 мая 2011

У меня есть следующий скелет Java-кода -

        try {
            Question q = null; //List of questions. I have put 3 in the list, in my main function
            int i = 0;
            while (i <= questions.size()) {
                System.out.println("iteration " + i);
                q = questions.get(i);
                try {
                    try {
                        System.out.println("Script completed"); 
                        break;
                    } catch (Exception e) {
                        // script is still executing... continue
                    }
                    //My entire logic is here.An exception is thrown in the first iteration
                    i++;
                } catch (Exception e) {
                    //The thrown exception is caught here
                    try {
                    //The caught exception is handled here
                } catch (IOException ioe) {
                    System.out.println("IO Exception..");
                }
            }
        }
        } catch (IOException ioe) {
            System.out.println("No more communication due to the lack of data");
        } catch (IllegalMonitorStateException imse) {
            System.out.println("Illegal Monitor State Exception");
        } catch (IllegalThreadStateException itse) {
            System.out.println("Illegal Thread State Exception");
        }

И вывод , который я получаю, выглядит примерно так -

iteration 0
//Exception handling related output

iteration 0  //repeated because i++ doesn't happen since exception is thrown
//Execution takes place normally

iteration 1
//????????  -  Here is where i am facing the problem. I am not getting 

вывод полностью. Я знаю причину, по которой я все еще нахожусь в итерации 1 (она имеет отношение к i ++, что не происходит ни разу из-за исключения, впервые выданного). Но кто-нибудь может мне помочь, как успешно выполнить эту итерацию?

1 Ответ

4 голосов
/ 03 мая 2011

Вам необходимо проверить , какой блок catch выполняется в каждой итерации. Если исключение выдается в //try3 или //try4 (или если исключение не выдается вообще), то i++ будет выполнено .

Если исключение выдается в //try2 (либо до //try3 или после //catch4), то i++ не будет казнены.

...