このトピックでは、JavaアプレットおよびJava Web Startアプリケーションの起動動作のカスタマイズ方法について説明します。カスタム・スプラッシュ画面およびカスタム進捗インジケータを使用できます。
この節の内容は以下のとおりです。
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のロード動作をカスタマイズするには、次に説明するようにいくつかの方法があります。
スプラッシュ画面を提供する
カスタマイズされたロード進捗インジケータを作成する
RIAダウンロードの進捗とRIA固有のデータのロードの進捗を反映させるために1つの進捗インジケータを活用する
また、クライアント・マシン上の古いバージョンのJava Runtime Environment (JRE)ソフトウェアに対応できるように、上の複数のオプションを組み合わせることもできます。
注: 特定のカスタマイズ・オプションは、アプレットまたはJava Web Startアプリケーションに固有のものです。このトピックではそのような場合を明確にします。
このセクションではRIAのロード処理について説明します。
RIAソフトウェアは、RIAをダウンロード、検証、および実行するための一連の手順を開始します。RIAロード処理は大まかに次の各段階に分けることができます。これらの段階の間、RIAソフトウェアはさまざまなレベルの進捗関連フィードバックを提供します。
初期化 - RIAソフトウェアはこの段階で、RIAの起動に必要なリソースの評価を実行します。RIAのダウンロード、検証、および実行に必要となる作業量は、この時点では不明です。
ロードと検証 - RIAソフトウェアは、必要なリソース(JARファイル)をインターネット経由で必要に応じてダウンロードします。RIAが以前にキャッシュされていた場合、RIAソフトウェアはローカル・キャッシュからリソースをロードします。RIAソフトウェアはリソースを検証します。リソースのロード処理および検証処理の間、決定性フィードバックがRIAソフトウェアによって伝達されます。決定性フィードバックは、RIAソフトウェアによって完了率が計算されて伝達されることを意味します。
RIAの実行 - RIAソフトウェアはこの段階でRIAを実行します。RIAは完全に機能する状態になりました。RIAはこの時点で、アプリケーション固有のデータをロードできます。
アプリケーションの外観をカスタマイズするために、アプリケーションの起動時に独自のスプラッシュ画面および進捗インジケータが表示されるように指定できます。
RIAのロード動作をカスタマイズするもっとも単純な方法は、スプラッシュ画面を提供することです。スプラッシュ画面に表示すべきイメージを指定します。RIA自体への変更は一切不要です。RIAソフトウェアは、RIAのロード中はスプラッシュ画面を表示し、RIAのリソースのダウンロードと検証が完了するとその画面を隠します。詳細は、次のトピックを参照してください。
Javaチュートリアルのアプレットのスプラッシュ画面の作成に関するトピック(例の確認)
Java Web StartのFAQおよびJNLPファイルの構文の
resources要素(Java Web Startアプリケーションのスプラッシュ画面の追加に関する情報)
デフォルトのロード進捗インジケータを、RIAのロード状況に関する定期的なフィードバックを提供するカスタム実装で置き換えることができます。矩形のボックスやSwing JProgressBar
コンポーネントの使用にこだわらないでください。RIAやWebサイトにとって意味のある、カスタマイズされたロード進捗インジケータを開発できます。ロード進捗インジケータでは、RIAのバックグラウンドでのロード中にエンド・ユーザーの興味や注意を持続させるため、視覚的な方法や視覚的でない方法を使用できます。
詳細な手順と例については、Javaチュートリアルのロード動作のカスタマイズに関するトピックを参照してください。ロード進捗インジケータのスクリーン・ショットをいくつか次に示します。
Java Web Startアプリケーションのデフォルトのロード進捗インジケータ
Java Web Startアプリケーションのカスタマイズされたロード進捗インジケータ
Reversi JavaFXアプレットのカスタマイズされたロード進捗インジケータ (ロードが進むにつれて黒の石が白に変わる)
次の各機能により、JNLPテクノロジを使って配備されたRIAで、ロード進捗インジケータのさまざまなカスタマイズが可能となります。
カスタマイズされたロード進捗インジケータは、決定性または非決定性のフィードバックを提供できます。
カスタマイズされたロード進捗インジケータは、進捗を伝えるための視覚的な手掛かりや視覚的でない手掛かりを提供できます。
アプレットとJava Web Startアプリケーションをサポートする単一のロード進捗インジケータを開発できます。
複数のロード進捗インジケータをJava Network Launch Protocol (JNLP)拡張として定義できます。RIAのメインJNLPファイルに指定されたロード進捗インジケータが存在する場合、そのインジケータが優先されます。非決定性の動作を避けるために、表示される拡張を指定します。
カスタマイズされたロード進捗インジケータは、アプリケーション固有のデータをロードする際の進捗を表示するためにも活用できます。たとえば、アプリケーションの初期データをロードするWebサービスがRIAによって呼び出される場合、RIAダウンロードのステータスを示すために0 - 75%の進捗範囲を使用し、アプリケーション・データを取得するWebサービス呼出しの進捗を示すために76% - 100%の範囲を使用できます。
アプレットのロード進捗インジケータは次の処理を実行できます。
java.applet.AppletStub
クラスのインスタンスへの参照を受け取ります。このため、ロード進捗インジケータのコードからjava.applet.AppletContext
オブジェクトにアクセスして、アプレットのパラメータを取得できます。
アプレットの親Webページ内のJavaScriptコードを呼び出します。ウィンドウへの参照は、次に示す方法で取得できます。
JSObject window = JSObject.getWindow(null); window.call("someJavaScriptFunction", args);
次のいくつかの項では、ロード進捗インジケータの実装に関する技術的な詳細を説明します。
ロード進捗インジケータ・クラスはjavax.jnlp.DownloadServiceListener
インタフェースを実装すべきです。
ロード進捗インジケータ・クラス内で次のコンストラクタを指定します。RIAソフトウェアは、クライアント・マシン上のJREソフトウェアの機能に応じて適切なコンストラクタを呼び出します。すべてのリソースが最新であれば、RIAソフトウェアはロード進捗インジケータ・クラスをインスタンス化しない場合もあります。
パラメータを1つも持たないコンストラクタ - Java Web Startアプリケーションのロード進捗インジケータ・クラスではこのコンストラクタを指定すべきです。アプレットのロード進捗インジケータ・クラス内でもこのコンストラクタを指定できます。RIAソフトウェアがこのコンストラクタを呼び出すと、javax.swing.JFrame
オブジェクトなどのトップレベル・ウィンドウ内に、ロード進捗インジケータのUIが表示されます。
1つのパラメータを持つコンストラクタ - このコンストラクタはjava.lang.Object
型のパラメータを1つ持ちます。このObject
引数はjava.awt.Container
クラスのインスタンスに型キャストできます。このコンストラクタはアプレットのロード進捗インジケータに関連しています。RIAソフトウェア(この場合はJava Plug-inソフトウェア)がこのコンストラクタを呼び出すと、ロード進捗インジケータのUIがアプレットのコンテナに表示されます。
2つのパラメータを持つコンストラクタ - このコンストラクタは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)ファイル内に次の情報を含めます。
ロード進捗インジケータ・クラスがどのJARファイルに含まれているかを示す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ソフトウェアは次のようにして進捗情報を伝えます。
RIAソフトウェアは必要に応じてロード進捗インジケータをインスタンス化します。すべてのリソースがキャッシュ済みで最新の状態になっている場合、ロード進捗インジケータがまったくインスタンス化されないことがあります。
RIAソフトウェアはprogress
、upgradingArchive
、validating
メソッドを何回か呼び出しますが、その際、overallPercent
には前回よりも大きな値が指定されます。
リソースがすでにキャッシュ済みかつ検証済みの場合、RIAソフトウェアは、単純にコンストラクタを呼び出したあとで100%完了メッセージを送信することがあります。
RIAソフトウェアは常に100%完了メッセージをロード進捗インジケータに送信します。
RIAの一部または全部がキャッシュされている場合はスプラッシュ画面やロード画面がまったく表示されない可能性がある、という事実を考慮してください。
カスタマイズされたロード進捗インジケータを開発する際には、次の各項目を考慮してください。
ロード進捗インジケータのJARファイルのサイズを小さく保ちます。RIAリソースが並行してダウンロードされます。ロード進捗インジケータのJARファイルのサイズが大きいと、そのダウンロードが他のリソースとほぼ同じ時期に終了する可能性があります。この場合、ロード進捗インジケータが非常に短い時間しか表示されなかったり、まったく表示されなかったりする可能性があります。
ロード進捗インジケータで必要になるリソースの量を制限します。ImageIO
やサービス検索は、他のリソースがダウンロードされる原因となる可能性があるため、使用しないでください。
ロード進捗インジケータは、Java Web Startアプリケーション自体と同じトップレベル・ウィンドウを使用できます。この場合、アプリケーションのコンストラクタ呼出し時に使用されるリソースの量を制限してください。代わりにアプリケーションのmain
メソッド内でリソース検索を指定してください。
ロード進捗インジケータをアプレットのUIに組み込むことができます。この場合、javax.swing.JPanel
オブジェクトなどのトップレベル・コンテナを作成し、それを前述のsurfaceContainer
オブジェクトに追加します。アプレットのリソースのダウンロードが完了したら、トップレベル・コンテナをsurfaceContainer
オブジェクトから削除し、それをアプレット自体に追加します。
署名付きRIAでは署名付きのロード進捗インジケータ実装が必要です。