タイルがビューに表示されているとき、タイルの読み込みは、
IlvTiledLayer
の場合、 IlvTileLoader によって、主に load メソッドを呼び出して実行されます。JViews Maps 8.1 以前では、これは Swing スレッドで実行されていましたが、コードが CPU 集約的になるため、GUI フリーズを招いていました。 IlvThreadedTileLoader クラスを使用すると、タイルの読み込みコードを異なるスレッドで実行できます。このクラスは、
IlvTileLoader
インターフェースを実装し、タイル読み込みコードを実行する代理 IlvTileLoader
のためにラッパーとして振る舞います。内部では、 IlvThreadedTileLoader オブジェクトは、(
IlvThreadedTileLoader
に対して IlvTileController からの) load
および release
呼び出しが積み上げられ、専用スレッドによって可能な限り素早く処理されるキューを保持します。この方法で、すべてのタイル読み込みが非同期的に実行され、ビューに表示させるために何十メガバイトものデータが読み込まれる場合でも、アプリケーションは反応可能な状態になります。このセクションで説明されているコードをすべて含む Map Builder のデモ用ソース・コードについては、
<installdir>
/jviews-maps89/samples/mapbuilder/index.html をご覧ください。
以下のコード・サンプルは、他のタイル・ローダーをカプセル化する
IlvThreadedTileLoader
の使用法を表しています。IlvTiledLayer tiledLayer; // this is the tile loader that performs the real loading, such as IlvShapeFileTileLoader IlvTileLoader tileLoader; // Create a threaded tile loader that encapsulates the previous one IlvThreadedTileLoader threadedTileLoader = new IlvThreadedTileLoader(tileLoader,true); // Configure this threaded tile loader : // set the minimum java thread priority for loading tiles threadedTileLoader.setThreadPriority(Thread.MIN_PRIORITY); // set to repaint the view after each tile is loaded threadedTileLoader.setRepaintPolicy(IlvThreadedTileLoader.REPAINT_AFTER_EACH_TI LE); // Set this threaded tile loader on the IlvTiledLayer tiledLayer.setTileLoader(threadedTileLoader);