-4

例外がスローされたときにプログラムがメッセージを出力し、例外を出力しないように、FileNotFound 例外をキャッチしようとしています。これが私のコードです:

import java.io.IOException;
import java.util.Scanner;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

public class SeegeeSOGFinder10
{
    public static void main(String args[]) throws InterruptedException, IOException
    {
        // Some code here

        int i = 0;

        if(choice.equalsIgnoreCase("blah"))
        {
            try
            {
                while(i < j)
                {
                    // Loop code
                    i++;
                }
            }
            catch(java.net.SocketTimeoutException e) // This is where I am having trouble, These 2 exceptions are still thrown and are printed and my message is not shown
            {
                System.out.println("Recieved HTTP timeout. Maybe we got rate limited? Slepping for 30 seconds.");
                Thread.sleep(30000);
            }
            catch(java.io.FileNotFoundException e)
            {
                System.out.println("File Not Found!");
            }

            System.out.println("Done!");
        }
        else
        {
            System.out.println("Invalid Choice");
        }
    }

    // Some more code
}

私が問題を抱えているコードはコメントされていますが、これらのエラーは両方ともスローされ、メッセージは出力されません。ループ内に try catch ブロックを囲み、プログラム全体を try catch ブロックに入れてみましたが、同じ結果になりました。

4

1 に答える 1

4

catch は、その try ブロック内でスローされた例外のみをキャッチします。メソッド全体で例外がスローされるがキャッチされない最も可能性の高い原因は、別の場所からスローされたことです。おそらく、このメソッドが try-catch ブロックの外部で呼び出したものです。

メソッド内のすべてのコードをブロックで囲むことをお勧めします。そうすれば、例外をキャッチして、例外の原因となった行番号を含むスタック トレースを表示できるはずです。

于 2013-01-03T22:15:32.883 に答える