如何处理已由另一个错误处理的错误?

时间:2018-04-04 21:31:22

标签: java

我正在使用Jsoup连接到一个网站。我已插入IOException以检查网站是否超时。

因为我已经处理SocketTimeOutException,我的IDE不允许我为IOException添加另一个捕获,这是公平的,我想。

有没有办法告诉Document doc = null; try { doc = Jsoup.connect(Url).proxy(proxy).userAgent(userAgent).timeout(10000).get(); } catch (IOException e) { if (...) { if(specificThread.running == false) { System.out.println("Thread got interrupted! Link visited -> "+ Url); Thread.currentThread().interrupt(); } try { System.out.println("Localhost detected! If this happens, you're stupid"); doc = Jsoup.connect(Url).userAgent(userAgent).get(); } catch (IOException e1) { System.out.println("Couldn't connect to " + Url + " , localhost was detected."); e1.printStackTrace(); System.exit(-1); } catch (java.lang.IllegalArgumentException error) { System.out.println("Malformed URL detected -> " + Url) ; } } else { System.out.println("Couldn't connect to " + Url); e.printStackTrace(); } } catch (java.lang.IllegalArgumentException error) { System.out.println("Malformed URL detected -> " + Url); } catch (java.net.SocketTimeoutException error) //IDE Is blocking this { //Handle error here } 错误是什么? 我想为不同的错误提供特定的调试输出,这样我就可以保持代码的清洁和高效。

这是我的代码(是的,缺少一些变量,但它们非常简单,但并非真的有必要):

<script>
    $(document).on("click", '.class', function(event) { 
        alert("a new event binded!");
    });
    </script>

是否可以这样做?

1 个答案:

答案 0 :(得分:2)

SocketTimeoutException的捕获之前放置IOException的捕获。

异常处理通过查看表直到找到匹配的异常类型来工作。因此,更具体的例外必须在更一般的例外之前,以便它们可以匹配。

JLS Sec 14.21,&#34;无法访问的语句&#34;中描述了这一点:

  

如果由于无法访问语句而无法执行该语句,则为编译时错误。

     

...

     
      
  • 如果满足以下两个条件,则可以访问catch块C

         
        
    • ...
    •   
    • 在try语句中没有先前的catch块,因此C&#39的参数类型与A&#39; s参数类型的子类相同。
    •   
  •   

因此,您只需要确保没有早期的catch块捕获超类参数。