有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何处理所有java代码。单个catch块中的net异常?

我试图处理作为java一部分的异常。net包。我浏览了documentation,看到了属于该包的12个异常,但找不到这些异常的父类

到目前为止,我尝试的是:

catch(Exception e)
{
    if(e instanceof org.openqa.selenium.WebDriverException)
        sendException("Problem is with the selenium web driver");
    else if(e instanceof java.net.Exception) //I need help with this line
        sendException("There is some problem with the network");
}

尝试此操作后,我收到以下错误消息

unable to resolve class java.net.Exception

我怎样才能抓住java。净例外


共 (6) 个答案

  1. # 2 楼答案

    java.net.Exception不存在,您无法通过这种方式从特定包捕获类的异常
    考虑到网络异常总是以java.net开头也是错误的
    一些网络异常不是以java.net开始的,异常也可以由另一个异常包装。例如java.net.SocketException可以被java.lang.IllegalStateException包装
    您不会处理它,因为这不是java.net异常

    instanceOf处理异常看起来也没有什么帮助
    catch子句中指定特定的异常就足够了
    还要注意,异常是自解释的,并且应该在其状态中包含所有相关信息:您不需要像这样将异常映射到文本消息

    您想要发送/记录的是利用关联到的异常类/消息/原因/stracktrace。您所做的只是解释异常,这意味着很容易出错

    那么就这样做吧:

    catch(Exception e){
        sendException(e); 
    }
    
    public void sendException(Exception e){
       // exploit e.getClass(), e.getMessage() or e.getStackTrace()
       ...
    }
    

    请注意,在某些情况下,您希望捕获一些特定的异常,因为您对它们有特定的处理:

    catch(WebDriverException e){
         processWebDriverException(e);
    }
    catch(Exception e){
         processAnyOtherException(e);
    }
    
  2. # 3 楼答案

    爪哇。网不存在异常,java。例外

    检查包是否为java。net,使用e.getClass()。getPackage():

    catch(Exception e)
    {
        if(e instanceof org.openqa.selenium.WebDriverException)
            sendException("Problem is with the selenium web driver");
        else if(e.getClass().getPackage().startsWith("java.net"))
            sendException("There is some problem with the network");
    }
    
  3. # 4 楼答案

    首先,你不能抓住java.net.Exception的原因。Exception类位于java.lang中,您不应该捕捉到异常

    那你该抓什么

    不幸的是,没有适合所有网络异常和非网络异常的超类型。但事实证明,大多数网络例外都以java.io.IOException为祖先

    (有一个java.net.*异常不是从IOException派生出来的,即java.net.URISyntaxException。但这是一个未经检查的异常,并不表示“网络问题”。)

    因此,一种方法是抓住IOException。您可以通过使用反射来获取异常类的包名(请参见https://stackoverflow.com/a/57002571/139985),从而进一步完善这个过程;e、 g

    } catch (org.openqa.selenium.WebDriverException e) {
        sendException("Problem is with the selenium web driver");
    } catch (IOException e) {
        if (e.getClass().getPackage().startsWith("java.net"))
            sendException("There is some problem with the network");
        else {
            throw e;  // Or diagnose differently
        }
    }
    
  4. # 5 楼答案

    Example
    
    Try{
    
    Code where your exception occuring
    
    }
    
    Catch(Exception e){
     e.printStackTrace();
    }
    
  5. # 6 楼答案

    你可以学习java。净例外情况如下:

    try {
    
    }
    catch (
        BindException 
        | ConnectException 
        | HttpRetryException
        | MalformedURLException
        | NoRouteToHostException
        | PortUnreachableException
        | ProtocolException
        | SocketException
        | SocketTimeoutException
        | UnknownHostException
        | UnknownServiceException
        | URISyntaxException
        e
    ){
        // do stuff with e
    }
    

    但是,如果要在之后调用instanceof以不同的方式处理每个异常,有什么意义呢

    在这种情况下,应使用不同的挡块