Java Platform, Standard Editionデプロイメント・ガイド
目次      

14 ロード動作のカスタマイズ

このトピックでは、JavaアプレットおよびJava Web Startアプリケーションの起動動作のカスタマイズ方法について説明します。 カスタム・スプラッシュ画面およびカスタム進捗インジケータを使用できます。

この節の内容は以下のとおりです。

14.1 RIAのロード動作

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アプリケーションに固有のものです。 このトピックではそのような場合を明確にします。

14.2 RIAのロード処理

このセクションではRIAのロード処理について説明します。

RIAソフトウェアは、RIAをダウンロード、検証、および実行するための一連のステップを開始します。 RIAロード処理は大まかに次の各段階に分けることができます。 これらの段階の間、RIAソフトウェアはさまざまなレベルの進捗関連フィードバックを提供します。

  • 初期化 - RIAソフトウェアはこの段階で、RIAの起動に必要なリソースのアセスメントを実行します。 RIAのダウンロード、検証、および実行に必要となる作業量は、この時点では不明です。

  • ロードと検証 - RIAソフトウェアは、必要なリソース(JARファイル)をインターネット経由で必要に応じてダウンロードします。 RIAが以前にキャッシュされていた場合、RIAソフトウェアはローカル・キャッシュからリソースをロードします。 RIAソフトウェアはリソースを検証します。 リソースのロード処理および検証処理の間、決定性フィードバックがRIAソフトウェアによって伝達されます。 決定性フィードバックは、RIAソフトウェアによって完了率が計算されて伝達されることを意味します。

  • RIAの実行 - RIAソフトウェアはこの段階でRIAを実行します。 RIAは完全に機能する状態になりました。 RIAはこの時点で、アプリケーション固有のデータをロードできます。

14.3 カスタマイズのオプション

アプリケーションの外観をカスタマイズするために、アプリケーションの起動時に独自のスプラッシュ画面および進捗インジケータが表示されるように指定できます。

14.3.1 スプラッシュ画面の追加

RIAのロード動作をカスタマイズするもっとも単純な方法は、スプラッシュ画面を提供することです。 スプラッシュ画面に表示すべきイメージを指定します。 RIA自体への変更は一切不要です。 RIAソフトウェアは、RIAのロード中はスプラッシュ画面を表示し、RIAのリソースのダウンロードと検証が完了するとその画面を隠します。 Java Web Startアプリケーションのスプラッシュ画面の追加の詳細は、「JNLPファイルの構文」「Java Web StartのFAQ」およびresources要素」を参照してください

14.3.2 カスタマイズされたロード進捗インジケータの実装

デフォルトのロード進捗インジケータを、RIAのロード状況に関する定期的なフィードバックを提供するカスタム実装で置き換えることができます。 矩形のボックスやSwing JProgressBarコンポーネントの使用にこだわらないでください。 RIAやWebサイトにとって意味のある、カスタマイズされたロード進捗インジケータを開発できます。 ロード進捗インジケータでは、RIAのバックグラウンドでのロード中にエンド・ユーザーの興味や注意を持続させるため、視覚的な方法や視覚的でない方法を使用できます。

次の各機能により、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); 
      

次のいくつかの項では、ロード進捗インジケータの実装に関する技術的な詳細を説明します。

14.3.3 javax.jnlp.DownloadServiceListenerインタフェース

ロード進捗インジケータ・クラスはjavax.jnlp.DownloadServiceListenerインタフェースを実装すべきです。

14.3.4 ロード進捗インジケータ・クラスのコンストラクタ

ロード進捗インジケータ・クラス内で次のコンストラクタを指定します。 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以上の場合だけです。

14.3.5 javax.jnlp.DownloadServiceListenerインタフェースのメソッド

ロード進捗インジケータ・クラスは、インタフェースの次の各メソッドを実装することで、最新の進捗情報の受信と伝達を行えるようにすべきです。

  • 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の値に基づいて、ロード進捗インジケータ内の進捗情報を更新します。

14.3.6 JNLPファイル内でのカスタム進捗インジケータの指定

ロード進捗インジケータを指定するには、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>

14.3.7 RIAソフトウェアが進捗を伝える方法

RIAソフトウェアは次のようにして進捗情報を伝えます。

  • RIAソフトウェアは必要に応じてロード進捗インジケータをインスタンス化します。 すべてのリソースがキャッシュ済みで最新の状態になっている場合、ロード進捗インジケータがまったくインスタンス化されないことがあります。

  • RIAソフトウェアはprogressupgradingArchivevalidatingメソッドを何回か呼び出しますが、その際、overallPercentには前回よりも大きな値が指定されます。

  • リソースがすでにキャッシュ済みかつ検証済みの場合、RIAソフトウェアは、単純にコンストラクタを呼び出したあとで100%完了メッセージを送信することがあります。

  • RIAソフトウェアは常に100%完了メッセージをロード進捗インジケータに送信します。

14.4 ベスト・プラクティスおよびヒント

  • RIAの一部または全部がキャッシュされている場合はスプラッシュ画面やロード画面がまったく表示されない可能性がある、という事実を考慮してください。

  • カスタマイズされたロード進捗インジケータを開発する際には、次の各項目を考慮してください。

    • ロード進捗インジケータのJARファイルのサイズを小さく保ちます。 RIAリソースが並行してダウンロードされます。 ロード進捗インジケータのJARファイルのサイズが大きいと、そのダウンロードが他のリソースとほぼ同じ時期に終了する可能性があります。 この場合、ロード進捗インジケータが非常に短い時間しか表示されなかったり、まったく表示されなかったりする可能性があります。

    • ロード進捗インジケータで必要になるリソースの量を制限します。 ImageIOやサービス検索は、他のリソースがダウンロードされる原因となる可能性があるため、使用しないでください。

    • ロード進捗インジケータは、Java Web Startアプリケーション自体と同じトップレベル・ウィンドウを使用できます。 この場合、アプリケーションのコンストラクタ呼出し時に使用されるリソースの量を制限してください。 代わりにアプリケーションのmainメソッド内でリソース検索を指定してください。

    • ロード進捗インジケータをアプレットのUIに組み込むことができます。 この場合、javax.swing.JPanelオブジェクトなどのトップレベル・コンテナを作成し、それを前述のsurfaceContainerオブジェクトに追加します。 アプレットのリソースのダウンロードが完了したら、トップレベル・コンテナをsurfaceContainerオブジェクトから削除し、それをアプレット自体に追加します。

    • 署名付きRIAでは署名付きのロード進捗インジケータ実装が必要です。

目次      

Copyright © 1993, 2025, Oracle and/or its affiliates. All rights reserved.