在Netbeans中捕获WorldWindJava 2.1中的RetrievalUrl的UnknownHostException

时间:2017-06-16 21:52:59

标签: java netbeans worldwind

我在netbeans TopComponent中使用WorldWindGlCanvas。打开顶部组件时,WorldWInd尝试连接到某个URL(例如worldwind20.arc.nasa.gov)。如果没有Internet连接,则会发生UnknowHostException,并显示一个对话框以显示此异常。 我想抓住这个例外。请注意,我知道worldwind可以离线工作,我可以设置它离线工作,但我想在线设置worldwind,以便在提供互联网连接时使用在线磁贴,如果没有互联网连接则使用缓存磁贴。 有没有办法抓住这个例外?

1 个答案:

答案 0 :(得分:1)

查看World Wind的源代码,似乎没有办法捕获该异常。

手动断开我的Internet连接后,我收到了以下的堆栈跟踪:

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)

基于该堆栈跟踪,我研究了一些源文件:

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);
    }

它似乎是在内部处理的,因此你似乎没有运气。