Java Rich Internet Application (RIA) は、インターネット経由でダウンロードされてエンドユーザーに表示されます。ダウンロードの速度は、RIA の JAR ファイルのサイズ、外部のあらゆる依存関係、インターネット接続の速度など、さまざまな条件によって変わる可能性があります。
RIA がダウンロードされている間はデフォルトで、RIA ソフトウェア (Java Plug-in および Java Web Start ソフトウェア) によって標準の進捗インジケータ (回転する Java ロゴや進捗バーなど) が表示されます。エンドユーザーは、大きなサイズのダウンロードに遭遇すると我慢できなくなる可能性があります。Java SE 6 update 18 と Java SE 6 update 21 リリースでの RIA ソフトウェアテクノロジの改善点を活用すれば、創造的で魅力的な意味のある RIA ロード動作を提供することで、エンドユーザーの注意を持続させることができます。RIA のロード動作をカスタマイズするには、次に説明するようにいくつかの方法があります。
また、クライアントマシン上の古いバージョンの Java Runtime Environment (JRE) ソフトウェアに対応できるように、上の複数のオプションを組み合わせることもできます。
注:特定のカスタマイズオプションは、アプレットまたは Java Web Start アプリケーションに固有のものです。このトピックではそのような場合を明確にします。
このセクションでは RIA のロード処理について説明します。
RIA ソフトウェアは、RIA をダウンロード、検証、および実行するための一連の手順を開始します。RIA ロード処理は大まかに次の各段階に分けることができます。これらの段階の間、RIA ソフトウェアはさまざまなレベルの進捗関連フィードバックを提供します。
RIA のロード動作をカスタマイズするもっとも単純な方法は、スプラッシュ画面を提供することです。スプラッシュ画面に表示すべきイメージを指定します。RIA 自体への変更は一切不要です。RIA ソフトウェアは、RIA のロード中はスプラッシュ画面を表示し、RIA のリソースのダウンロードと検証が完了するとその画面を隠します。詳細は、次のトピックを参照してください。
デフォルトのロード進捗インジケータを、RIA のロード状況に関する定期的なフィードバックを提供するカスタム実装で置き換えることができます。矩形のボックスや Swing JProgressBar コンポーネントの使用にこだわらないでください。RIA や Web サイトにとって意味のある、カスタマイズされたロード進捗インジケータを開発できます。ロード進捗インジケータでは、RIA のバックグラウンドでのロード中にエンドユーザーの興味や注意を持続させるため、視覚的な方法や視覚的でない方法を使用できます。
詳細な手順と例については、Java チュートリアルの「Customizing the Loading Experience」トピックを参照してください。ロード進捗インジケータのスクリーンショットをいくつか次に示します。
Java Web Start アプリケーションのデフォルトのロード進捗インジケータ
Java Web Start アプリケーションのカスタマイズされたロード進捗インジケータ
Reversi JavaFX アプレットのカスタマイズされたロード進捗インジケータ (ロードが進むにつれて黒の石が白に変わる)
次の各機能により、JNLP テクノロジを使って配備された RIA で、ロード進捗インジケータのさまざまなカスタマイズが可能となります。
JSObject window = JSObject.getWindow(null);
window.call("someJavaScriptFunction", args);
次のいくつかの段落では、ロード進捗インジケータの実装に関する技術的な詳細について説明します。
javax.jnlp.DownloadServiceListener インタフェースロード進捗インジケータクラスは javax.jnlp.DownloadServiceListener インタフェースを実装すべきです。
ロード進捗インジケータクラス内で次のコンストラクタを指定します。RIA ソフトウェアは、クライアントマシン上の JRE ソフトウェアの機能に応じて適切なコンストラクタを呼び出します。すべてのリソースが最新であれば、RIA ソフトウェアはロード進捗インジケータクラスをインスタンス化しない場合もあります。
javax.swing.JFrame オブジェクトなどのトップレベルウィンドウ内に、ロード進捗インジケータの UI が表示されます。java.lang.Object 型のパラメータを 1 つ持ちます。この Object 引数は java.awt.Container クラスのインスタンスに型キャストできます。このコンストラクタはアプレットのロード進捗インジケータに関連しています。RIA ソフトウェア (この場合は Java Plug-in ソフトウェア) がこのコンストラクタを呼び出すと、ロード進捗インジケータの UI がアプレットのコンテナに表示されます。java.lang.Object 型のパラメータを 2 つ持ちます。最初の Object 引数は java.awt.Container クラスのインスタンスに型キャストできます。2 番目の Object 引数は java.applet.AppletStub クラスのインスタンスに型キャストできます。RIA ソフトウェア (この場合は Java Plug-in ソフトウェア) がこのコンストラクタを呼び出すと、ロード進捗インジケータの UI がアプレットのコンテナに表示されます。ロード進捗インジケータは、java.applet.AppletContext オブジェクトにアクセスして自身をさらにカスタマイズできます。このコンストラクタはアプレットのロード進捗インジケータに関連しています。
2 つのパラメータを持つコンストラクタを指定するときは、古いバージョンのクライアント JRE ソフトウェアに対応できるように、単一パラメータのコンストラクタも指定することをお勧めします。2 つのパラメータを持つコンストラクタが呼び出されるのは、クライアント JRE ソフトウェアのバージョンが Java SE 6 update 21 以上の場合だけです。
ロード進捗インジケータクラスは、インタフェースの次の各メソッドを実装することで、最新の進捗情報の受信と伝達を行えるようにすべきです。
progress(URL url, String version, long readSoFar, long total, int overallPercent)upgradingArchive(java.net.URL url, java.lang.String version, int patchPercent, int overallPercent)validating(java.net.URL url, java.lang.String version, long entry, long total, int overallPercent) – ロード進捗インジケータクラスがインスタンス化される際には常に、値 100 が overallPercent に指定されてこのメソッドが呼び出されます。これらのメソッドで受け取った overallPercent の値に基づいて、ロード進捗インジケータ内の進捗情報を更新します。
ロード進捗インジケータを指定するには、RIA の Java Network Launch Protocol (JNLP) ファイル内に次の情報を含めます。
download="progress" 属性progress-class 属性。この属性は、RIA やロード進捗インジケータの配備方法に応じて <applet-desc>、<application-desc>、<component-desc> のいずれかの一部として定義できます。アプレットのサンプル JNLP ファイルを次に示します。
<jnlp spec="1.0+" codebase="" href="">
...
<resources>
...
<jar href="MyApplet.jar" main="true" />
<jar href="CustomProgressIndicator.jar" download="progress" />
</resources>
<applet-desc
name="MyFavoriteApplet"
main-class="myAppletPackage.MyFavoriteApplet"
progress-class="myCustomProgressPackage.MyCustomProgressIndicator"
width="600"
height="200">
</applet-desc>
...
</jnlp>
RIA ソフトウェアは次のようにして進捗情報を伝えます。
progress、upgradingArchive、validating メソッドを何回か呼び出しますが、その際、overallPercent には前回よりも大きな値が指定されます。main メソッド内でリソース検索を指定してください。javax.swing.JPanel オブジェクトなどのトップレベルコンテナを作成し、それを前述の surfaceContainer オブジェクトに追加します。アプレットのリソースのダウンロードが完了したら、トップレベルコンテナを surfaceContainer オブジェクトから削除し、それをアプレット自体に追加します。