【问题标题】:Catching UnknownHostException of RetrievalUrl in WorldWindJava 2.1 in Netbeans在 Netbeans 的 WorldWindJava 2.1 中捕获 RetrievalUrl 的 UnknownHostException
【发布时间】:2017-11-19 18:39:59
【问题描述】:

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

【问题讨论】:

    标签: java netbeans worldwind


    【解决方案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);
        }
    

    它似乎是在内部处理的,因此您似乎不走运。

    【讨论】:

    • 谢谢@frenchDolphin。我已经看到你提到的代码。我注意到(在我的问题的标题中)异常来自 URLRetriever。你认为没有办法处理这个异常?
    • 据我所知,或者从 WWD 的经验来看,抱歉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    • 2018-02-19
    • 2021-12-24
    • 2017-12-22
    相关资源
    最近更新 更多