3

不久

我无法弄清楚network: Cache entry not found [url: ...]在 Web 浏览器中运行小程序期间消息出现在 Java 控制台中的常见原因是什么。我知道在执行java.net.URLConnection(从 Internet 请求一些数据)时可能会出现这个问题,但仍然不知道寻找调查我的特定问题的任何可能原因。所以我的问题是:这条消息的可能原因是什么,这会影响应用程序的正常运行吗?最后,什么是缓存,我可以以某种方式控制它吗?

详细地

发布大的代码片段太困难且没有必要,因此我将尝试尽可能简单地描述问题。

我正在构建一个基于NASA WorldWind的小程序,并在请求从 JavaScript 调用相应小程序的方法的平铺图像层时面临一个非常奇怪的行为。平铺图像图层是一个可以覆盖 3D 地球的图层,由一组固定大小的图片(图块)组成,这些图片在图层加载期间将单独请求(假设图层类似于拼图块 :)。这就是为什么每个 tile 的请求都有自己的线程。

最初我有一个AccessControllerException,因为每个磁贴请求线程无权进行跨域请求并将加载结果读取/保存到本地文件缓存。这个问题已经通过包装瓦片请求的实际代码解决了

AccessController.doPrivileged(new PrivilegedAction() {

    @Override
    public Object run() {

        // Requesting tile and performing with the result...
        // ...
    }
});

结果,我看到切片已加载并存储在本地文件缓存目录中。但我仍然没有看到地球上的图层。事实是我在 Java 控制台中收到以下网络消息:

network: Cache entry not found [url: http://caches.scanex.ru/getTile.cgi?T=BMNG-01-2004&L=0&X=4&Y=1, version: null]
network: Connecting http://caches.scanex.ru/getTile.cgi?T=BMNG-01-2004&L=0&X=4&Y=1 with proxy=HTTP @ /192.168.4.10:8080

当这些消息出现时,我能够在代码中找到一个位置 - 获取 HTTP 响应代码时:

HttpURLConnection htpc = (HttpURLConnection)fconnection;
responseCode = htpc.getResponseCode();

然后,我发现java.net.URL提供的实例URLConnection和其他准备工作也在另一个线程中进行。准确地说,tile 的下载通过以下线程链进行,其中每个子线程由java.util.concurrent.FutureTask表示:

Layer's rendering thread>> Tile request task where URL is to be prepared basing on existing local cache data>> Reading tile contents and handling the result (storing in local cache if it's required(它是上述网络消息发生的地方)。

最后,我通过构造为所有这些线程授予了权限AccessController.doPrivileged(...),并且我可以看到所需的结果 - 平铺的图像层被覆盖。但我仍然对Cache entry not found消息感到困惑,因为它们留在 Java 控制台中并出现在每个请求的磁贴中。这就是我想知道的原因: 这种行为是否正常,这些消息实际上意味着什么?

PS 对于有兴趣的人 - http://caches.scanex.ru目前无法从外部工作。

4

0 回答 0