如何捕获NoRouteToHostException

时间:2014-05-01 16:28:03

标签: java exception

我被指派制作方法来检查互联网是否可以访问。 因此,如果无法连接,我会尝试使用此伪方法返回false。

 public static boolean isInternetReachable()
 {
     try {
         //make a URL to a known source
         URL url = new URL("http://www.google.com");

         //open a connection to that source
         HttpURLConnection urlConnect = (HttpURLConnection)url.openConnection();

         //trying to retrieve data from the source. If there
         //is no connection, this line will fail
         urlConnect.setConnectTimeout(1000);
         Object objData = urlConnect.getContent();

     } catch (UnknownHostException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
         return false;
     }

     catch (IOException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
         return false;
     } 
     catch(Exception e){
         e.printStackTrace();
         return false;
     }
     return true;
 }

但是,我收到此错误而不是捕获异常(并且能够返回false)

java.net.NoRouteToHostException: No route to host: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.net.NetworkClient.doConnect(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.<init>(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at java.net.URLConnection.getContent(Unknown Source)
at log2.isInternetReachable(log2.java:59)
at log2$7.actionPerformed(log2.java:319)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

我不能只使用catch(NoRouteToHostException e)来捕获异常。 如果无法连接,我怎样才能正确返回false。

1 个答案:

答案 0 :(得分:0)

你可以捕捉它,因为你正在捕捉其他例外。

#NoRouteToHostException

此外,如果你只能使用Exception,这是可以捕获任何Exception所有异常之父)的所有异常的超类。

try
{
}
catch(Exception e){}

OR

try
    {
    }
    catch(NoRouteToHostException e){}

还有一件事就是逐一捕捉异常而不是如果你愿意,你可以试一试并使用多次捕获。

此外,您只会抓住IOException,因此不会发现其他例外情况。