まもなく
network: Cache entry not found [url: ...]
Web ブラウザでアプレットを実行しているときに Java コンソールにメッセージが表示される一般的な理由がわかりません。これは、java.net.URLConnection
(インターネットからデータを要求する)実行時に表示される可能性があることはわかっていますが、特定の問題を調査するために探す理由についてはまだわかりません。私の質問は次のとおりです:このメッセージの考えられる理由は何ですか?また、これはアプリケーションの通常の実行に影響を与える可能性がありますか? 最後に、キャッシュとは何ですか? どうにかしてそれを制御できますか?
詳細に
大きなコード スニペットを投稿するのは難しすぎて不必要なので、できるだけ簡単に問題を説明しようと思います。
NASA WorldWindに基づいてアプレットを構築していますが、JavaScript から対応するアプレットのメソッドを呼び出してタイル画像レイヤーを要求すると、非常に奇妙な動作に直面します。タイル画像レイヤーは、3D Earth をオーバーレイできるレイヤーであり、レイヤーの読み込み中に個別に要求される固定サイズの画像 (タイル) のセットで構成されます (レイヤーはタイルのパズルのようなものだとします:)。そのため、各タイルのリクエストには独自のスレッドがあります。
最初は、各タイル要求スレッドにクロスドメイン要求を作成し、読み込み結果をローカル ファイル キャッシュに読み取り/保存する権限がなかったため、 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
やその他の準備も別のスレッドで行われていることがわかりました。正確には、タイルのダウンロードは、各子スレッドが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は現在、外部からは機能しません。