2017-06-16 6 views
2

J'utilise WorldWindGlCanvas dans un TopComponent netbeans. Lorsque le composant supérieur est ouvert, WorldWInd essaie de se connecter à une URL (par exemple, worldwind20.arc.nasa.gov). S'il n'y a pas de connexion Internet, UnknowHostException est généré et une boîte de dialogue s'affiche pour afficher cette exception. Je veux attraper cette exception. Notez que je sais que worldwind peut fonctionner hors ligne et que je peux le faire fonctionner hors ligne mais je veux configurer worldwind en ligne pour qu'il utilise des tuiles en ligne quand la connexion internet est fournie et utilise des tuiles en cache s'il n'y a pas de connexion internet. Y at-il un moyen d'attraper cette exception?Attraper UnknownHostException de RetrievalUrl dans WorldWindJava 2.1 dans NetBeans

Répondre

1

En regardant le code source de World Wind, il ne semble pas y avoir de moyen d'attraper cette exception.

Lors de la déconnexion manuelle ma connexion Internet, j'ai reçu une trace de la pile des éléments suivants:

Jun 16, 2017 6:19:43 PM 
gov.nasa.worldwind.util.SessionCacheRetrievalPostProcessor run 
SEVERE: Retrieval failed for https://worldwind26.arc.nasa.gov/elev?EXCEPTIONS=application/vnd.ogc.se_xml&REQUEST=GetCapabilities&SERVICE=WMS&VERSION=1.3.0 
Jun 16, 2017 6:19:43 PM gov.nasa.worldwind.util.SessionCacheUtils retrieveSessionData 
SEVERE: Exception while retrieving resources for https://worldwind26.arc.nasa.gov/elev?EXCEPTIONS=application/vnd.ogc.se_xml&REQUEST=GetCapabilities&SERVICE=WMS&VERSION=1.3.0 
java.net.UnknownHostException: worldwind26.arc.nasa.gov 
... 
at gov.nasa.worldwind.retrieve.HTTPRetriever.doRead(HTTPRetriever.java:48) 
at gov.nasa.worldwind.retrieve.URLRetriever.read(URLRetriever.java:368) 
at gov.nasa.worldwind.retrieve.URLRetriever.call(URLRetriever.java:244) 
at gov.nasa.worldwind.retrieve.URLRetriever.call(URLRetriever.java:27) 
at gov.nasa.worldwind.util.SessionCacheUtils.retrieveSessionData(SessionCacheUtils.java:80) 
at gov.nasa.worldwind.util.SessionCacheUtils.getOrRetrieveSessionCapabilities(SessionCacheUtils.java:170) 
at gov.nasa.worldwind.terrain.BasicElevationModel.retrieveResources(BasicElevationModel.java:2028) 
at gov.nasa.worldwind.terrain.BasicElevationModel$3.run(BasicElevationModel.java:2118) 
at java.lang.Thread.run(Thread.java:745) 

Basé sur cette trace de la pile, j'ai étudié quelques fichiers source:

URLRetriever.java:

try { 
     ... 
} catch (Exception e) { 
     if (!(e instanceof java.net.SocketTimeoutException || e instanceof UnknownHostException 
      || e instanceof SocketException)) { 
       Logging.logger().log(Level.SEVERE, 
       Logging.getMessage("URLRetriever.ErrorReadingFromConnection", this.url.toString()), e); 
     } 
     throw e; 
} 

SessionCacheUtils.java:

try { 
     retriever.call(); 
    } catch (Exception e) { 
     String message = Logging.getMessage("layers.TiledImageLayer.ExceptionRetrievingResources", url.toString()); 
     Logging.logger().log(java.util.logging.Level.SEVERE, message, e); 
    } 

Il semble être géré en interne, et donc vous semblez avoir de la chance.

+0

Merci @frenchDolphin. J'ai vu votre code mentionné. J'ai noté (dans le titre de ma question) que l'exception provient de URLRetriever. Vous croyez qu'il n'y a aucun moyen de gérer cette exception? –

+0

Pas aussi loin que je peux dire, ou par expérience avec WWD, désolé. – frenchDolphin