-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 回答