2011-02-24 28 views
3

我必须下载一些URL,并且在操作过程中可能会发生一些异常,例如java.net.NoRouteToHostException。我认为这是一个临时的错误例外,因为如果您在一段时间后重试它,下载可以成功。
所以,我想捕捉所有与临时错误有关的例外情况,并且我已经开始使用这些例外情况:java.net.NoRouteToHostExceptionjava.net.SocketException
您能否列出其他例外情况?捕获临时网络错误导致的异常

+1

java.net.SocketException是java.net.NoRouteToHostException的父亲,因此您可能只捕获父级。 SocketException的其他childs是BindException,ConnectException和PortUnreachableException。也许这只是在你的情况下只捕获SocketException ... – reef 2011-02-24 15:40:41

+0

添加我的评论作为答案 – reef 2011-02-24 15:47:01

回答

4

java.net.SocketExceptionjava.net.NoRouteToHostException的母公司,所以你可能只捕获父母。 SocketException的其他孩子是BindException,ConnectExceptionPortUnreachableException。也许可以只捕获SocketException在你的情况下...

0

由于@reef已经说过java.net.NoRouteToHostException exntends java.net.SocketException,所以如果你捕获java.net.SocketException就足够了。但java.net.SocketException扩展IOException,我认为这是你应该捕捉的。所有的IO问题都应该抛出这个异常。

0

HttpRetryException是另一个。也许在java.net中没有扩展SocketException的所有东西?

一个快速(非常脏)的方式可能是

try { 
.... 
} catch(Exception e) { 
    if(e.getClass().getPackage().getName().equalsIgnoreCase("java.net")) { 
     retry(); 
    } 
} 
+1

但是,你可能不想把'java.net.MalformedURLException'视为临时网络错误。 – satur9nine 2016-04-28 00:06:18

1

一种模式有时它是有用用于暂时性错误的重试的操作处理是定义一个错误回调接口和实现一些类它;当发生错误时,让回调对象知道,并让它决定是否抛出异常或应该重试该操作。由于现有的通信类不遵循这种模式,因此可能需要捕捉它们的例外情况并将其转化为回调。

请注意,与正常的异常处理相比,此方法可以更轻松地处理许多错误处理场景。除此之外,它可以很容易地设置可以尝试多少次重试,可能需要多长时间等的策略,并且还提供了一种在接收到类似“取消”请求时跳过未来重试的方法。

相关问题