如果任何网站无法使用Java代码,如何抛出异常



我正在使用java。 我有一个网址作为输入。我正在尝试使用java代码打开url。 我正在使用:

   URL url=new URL("http://doctorwho.time-and-space.co.uk/index.php");
   URLConnection conn=url.openConnection();
   InputStream in=conn.getInputStream();

在这里我传递了一个链接作为输入,但该网站不可用。在这里我想扔一个打开此URL时出现异常,但它没有抛出任何异常,它正在正常执行。请帮助我,如果网站不可用,如何捕获此异常。

实际上,您的所有行都可能引发异常:

  • java.net.URL.openConnection() throws IOException
  • java.net.URLConnection.getInputStream() throws IOException
  • java.net.URLConnection.getInputStream() throws IOException

你应该一一处理这些,如果你遇到其中任何一个,你应该在自己的代码中处理错误。也许抛出另一个异常,停止执行,任何你想要的。可能你在这个块周围有一个很大的尝试(例外e),你应该摆脱它。

如果你想抛出一个异常,而不是在函数中处理它,请使用throws,不要使用try-catch

    public void foo() throws IOException
    {
        URL url=new URL("http://doctorwho.time-and-space.co.uk/index.php");
        URLConnection conn=url.openConnection();
        InputStream in=conn.getInputStream();
        //...
    }

您可以将 IOException 包装到您自己的中。

public void fireURL(String pathToFireParam) throws CustomException
{
    try{
        URL url=new URL(pathToFireParam);
        URLConnection conn=url.openConnection();
        InputStream in=conn.getInputStream();
    } catch(IOException ioexc){
        throw new CustomException("Unavailable: "+ioexc.getMessage(),ioexc);
    }
}

这段代码确实抛出了一个异常:IOException。

最好的办法可能是创建一个特定于此服务的 Exception 类,然后重新捕获。要让程序根据错误采取不同的操作(这可能只是显示一个漂亮的消息,而不是一个拥抱的堆栈跟踪),你可以使用特定的异常来扩展你的基本服务异常。

所以基本例外:

public class MyServiceException extends Exception {
    private static final long serialVersionUID = 1L;
    public MyServiceException(String s, Throwable throwable) {
        super(s, throwable);
    }
}

针对与"东西"相关的所有问题引发的异常

public class MyServiceStufFailedException extends MyServiceException {
    private static final long serialVersionUID = 1L;
    public MyServiceStufFailedException(String s, Throwable throwable) {
        super(s, throwable);
    }
}

以及加载XML文件的代码:

private void doStufWithURL(String fileURL) throws MyServiceStufFailedException {
    try {
    URL url=new URL(fileURL);
       URLConnection conn=url.openConnection();
       InputStream in=conn.getInputStream();
       // Use input Stream too...
    } catch (IOException exception) {
        //Don't forget to put an explanation and the cause to help while debugging.
        throw new MyServiceStufFailedException("IO Error while reading " + fileURL, exception);
    }
}

最新更新