次のリリース (Early Access)

次世代 Java™ Plug-In テクノロジのリリースノート

完全な環境と実行環境は
Get the JDK download  からダウンロードできます。

Java SE 6 Update 10 > 新しい Java Plug-In

目次

はじめに

Java Runtime Environment の一部である Java Plug-In テクノロジ (以下、「Java Plug-In」) を使用すると、Java アプレットをデスクトップ上の一般的な Web ブラウザで実行できます。Java SE 6 Update 10 で新たに導入された次世代の Java Plug-In は、下位互換性を保ちつつアプレットの全体的な信頼性と機能性を向上させるとともに、Web ブラウザ内で動作するアプレットに強力な新機能を提供します。

次世代 Java Plug-In では、アーキテクチャーが完全に再設計されました。新しいプラグインでは、アプレットを Web ブラウザと同じオペレーティングシステムプロセス内で実行する代わりに、1 つ以上の Java 仮想マシンインスタンス (JVM) を実行し、そこからブラウザに再び接続することで周囲の Web ページとの完全な相互運用性を実現します。このアーキテクチャー変更には数多くの利点があり、いくつもの新機能の実装が可能になりました。

  • 信頼性の向上。 アプレットを実行中の JVM は、オペレーティングシステムレベルで Web ブラウザから隔離されています。アプレットの実行中に不具合が生じたり、非協調的なアプレットが停止を拒否する場合、新しい Java Plug-In がエラー条件を検出して適切な方法で処理するため、Web ブラウザは影響を受けません。
  • 組み込み JNLP のサポート。 新しいプラグインは JNLP ファイルからアプレットを直接起動する機能を備えているため (Java Web Start を使用)、Java コンテンツの配備をブラウザの内部と外部で一元管理することが可能になります。開発者は、JavaFX 実行時ライブラリOpenGL を使用した 3D グラフィックス、アプレット内部での惑星規模の地形視覚化など、JNLP 拡張機能を再利用することで高度な機能を実現できるようになりました。アプレットは、サンドボックス化されたコードから、持続的データ記憶領域、ローカルファイルシステムアクセスなどの便利な機能に対応した JNLP API にアクセスできます。
  • アプレットごとのコマンド行引数。 JVM コマンド行引数をアプレットごとに指定できるため、ヒープサイズや Java 2D ハードウェアアクセラレーション機能などのオプションをきめ細かく制御できます。JNLP を使って起動するアプレットの場合は、コマンド行引数またはシステムプロパティー、あるいはその両方を JNLP ファイル内に組み込むだけです。従来のスタイルのアプレットの場合は、これらの引数を Web ページの HTML に埋め込むことができます。
  • 複数の Java プラットフォームバージョンのサポート。 アプレットのインスタンスごとに、動作する Java プラットフォームのバージョンを要求できます。この機能は、アプレットの実行を特定の Java プラットフォームバージョンまたは特定の Java プラットフォームファミリに限定することを望む企業の顧客のために設計されました。新しいプラグインでは、Java プラットフォームの特定バージョンの選択、および特定ファミリの選択がどちらもサポートされます。
  • Java/JavaScript 通信の改善。 Web ブラウザ内の JavaScript エンジンと Java プログラミング言語間のブリッジが、完全に再実装されました。新しい実装は、下位互換性の維持に加え、Java による JavaScript の呼び出しと JavaScript による Java の呼び出しの両面で、信頼性、パフォーマンス、およびブラウザ間相互の移植性の向上を特徴としています。静的 Java メソッドの呼び出し、新しい Java オブジェクトのインスタンス化、および Sun 以外のパッケージの JavaScript からの読み出しなど、以前の Mozilla 固有の「LiveConnect」機能がすべてのブラウザで利用可能になりました。
  • ユーザー経験の向上。 新しい Java Plug-In はアプレットをバックグラウンドで起動するため、Web ブラウザは常に応答可能な状態にあります。アプレットは、実行可能な状態になると Web ページに表示されます。
  • アプレットライフサイクル管理の改善。 アプレットライフサイクルメソッド initstartstop、および destroy の呼び出しの確定性が向上したため、ブラウザ間共通の動作が改善されました。下位互換性の維持に必要なアプレットのクラスローダキャッシュおよび従来のアプレットライフサイクルが完全にサポートされるとともに、双方の動作が改善されました。
  • 大規模なヒープのサポート。 これまでは、Java コントロールパネルでアプレットに指定可能な最大ヒープサイズは制限されていました。新しい Java Plug-In ではこの制限が修正され、コマンド行アプリケーションと同量のヒープサイズを使用できるようになりました。
  • Windows Vista サポートの改善。 Microsoft Windows Vista の保護モード Internet Explorer 上で動作する署名付きアプレットが、通常のユーザーアプリケーションと同じ特権を持つようになったため、このプラットフォームへの移植上の障害が取り除かれました。

新しいプラグインは、長期間修正されずにいたいくつかのバグをすぐに修正します。次に示すバグはその一部です。

6359309 -Xmx パラメータが大きな数値に設定されていると、Internet Explorer でプラグインが起動しない
6433218 Java ランタイムパラメータ設定が大きな数値に設定されていると、Java アプレットが失敗する
6504236 Vista 上でファイル入出力の IE Broker プロセスが実行される
6516270 IE7 で Java アプレットを実行すると、「複数の Java 仮想マシンが稼動中です」というエラーを表示して失敗する
6528750 ランタイムパラメータ値が大きな数値に設定されていると、JRE が失敗する
6548078 Windows Vista 上で保護モードの IE7 を実行すると、Java セキュリティーモデルが破壊される
6559586 このアプレットサイトが原因で IE がフリーズする

サポートされるプラットフォームとブラウザ

新しい Java Plug-In は、次のブラウザで動作するように設計されています。

  • Windows XP および Vista 上で実行される Internet Explorer 6 および 7
  • Windows XP、Windows Vista、Solaris、および Linux 上で実行される Firefox 3

この文書の執筆時点では、Firefox 3 の最終バージョンはまだリリースされていません。このブラウザの最新のナイトリビルドは、次の場所からダウンロードできます。

最新のナイトリビルドを使用することをお勧めします。

新しい Java Plug-In は Firefox 2 では動作しません。 Windows プラットフォームの場合、Java コントロールパネルを使って新しい Java Plug-In を有効にすると、Firefox 2 の起動時には従来のプラグインが使用され、Firefox 3 の起動時には新しいプラグインが使用されます。 Sun Microsystems と Mozilla Foundation は、Firefox 3 で新しい Java Plug-In をサポートするため、 緊密な関係を保ちつつ作業を進めてきました。両組織は共通して、必要な (重大な) 変更を Firefox 2 にバックポートしないことを決定しています。これは、最終バージョンのリリース後、短期間のうちに大半の Firefox ユーザーが Firefox 3 にアップグレードすることが見込まれるためです。

インストール

Windows プラットフォーム

Windows プラットフォームの場合、Java プラットフォームのインストール時に、Internet Explorer および Firefox 3 Web ブラウザで実行中のアプレットに対して新しいプラグインが自動的に有効になります。ユーザーが操作を実行する必要はありません。

当面の間、従来のプラグインと新しいプラグインの両方が並行して提供されます。下位互換性維持のための代替手段を提供するため、Java コントロールパネル内に、どちらのプラグインをアプレットの実行に使用するかを指定するスイッチが含められます。切り替えを実行するには、Java コントロールパネルを実行して「詳細」タブを表示し、「Java Plug-in」ノードで「次世代の Java Plug-in を有効にする」チェックボックスのオン/オフを切り替えます。

Unix プラットフォーム (Solaris および Linux)

.../jre/lib/{i386,sparc}/libnpjp2.so へのシンボリックリンクを、Firefox 3 の firefox/plugins ディレクトリまたは ~/.mozilla/plugins ディレクトリに配置します。リンクの切れた libjavaplugin_oji.so ライブラリへの既存のシンボリックリンクをすべて削除します。

従来の Java Plug-In の使用に戻すには、libnpjp2.so へのシンボリックリンクを削除して、同じ Java プラットフォームから libjavaplugin_oji.so へのシンボリックリンクを再インストールします。

<applet><object> および <embed> タグの新しいパラメータ

新しい Java Plug-In の新機能の多くは、既存の <applet><object>、および <embed> タグの新しいパラメータとして公開されています。

一般に、Java SE 6 Update 10 で新たに追加されたJava 配備ツールキットを使用して、アプレットタグの HTML を自動的に生成することをお勧めします。配備アドバイスガイドに、Java 配備ツールキットを使用してアプレットを簡単かつ移植性の高い方法で配備する方法が示されています。

次に示すパラメータはすべて、Java 配備ツールキットの JavaScript ライブラリの runApplet メソッドに渡される parameters アレイ内で簡単に指定できます。または、入れ子の PARAM タグ、または 類似の EMBED タグ用構文を使用して、これらのパラメータを既存のアプレットに手作業で追加できます。詳細は、「Java Plug-In ガイド」の「applet、object、および embed タグの使用」セクションを参照してください。理解を容易にするために、次に示す例では <applet> および <param> タグのみを使用しています。

次に示すパラメータはすべて省略可能であり、指定しない場合はデフォルト値が使用されます。

JNLP のサポート

次世代 Java Plug-In の最も重要な新機能は、JNLP ファイルからアプレットを起動する機能が組み込みでサポートされたことです。JNLP ファイル形式をアプレット記述子として使用することにより、Java Web Start アプリケーション用に記述された以前の JNLP 拡張機能をアプレットでただちに再利用できるとともに、ほかにもさまざまな方法でアプレットの機能が大幅に拡張されます。

jnlp_href

新しい Java Plug-In がアプレットの起動に使用する JNLP を指定します。このパラメータの詳細は、「新しい Java™ Plug-In テクノロジでの JNLP サポート」を参照してください。

ロード画面

新しいプラグインでは、アプレットのロード前に表示されるイメージのカスタマイズ機能が向上しています。image パラメータのターゲットとしてアニメーション GIF がサポートされました。詳細は、「Java Plugin ガイド」の「特別なアプレット属性」セクションを参照してください。また、次のパラメータも新たにサポートされました。

boxborder

アプレットがロードされるまでアプレット領域にイメージを表示する間、その周囲に 1 ピクセル幅の境界線を描画するかどうかを示す boolean 型パラメータ。デフォルトは true です。特に、イメージのロード中にアニメーション GIF を使用する場合は、ちらつきが発生しないよう、この値を false に設定することをお勧めします。

centerimage

ロード中のイメージを、左上隅を起点としてではなく、アプレット領域中央に表示するかどうかを示す boolean 型パラメータ。デフォルトは false です。

boxborder および centerimage パラメータの使用例:

   <APPLET archive="large_archive.jar"
           code="MyApplet"
           width="300" height="300">
      <!-- Use an animated GIF as an indeterminate progress bar
           while the applet is loading -->
      <PARAM NAME="image" VALUE="animated_gif.gif">
      <!-- Turn off the box border for better blending with the
           surrounding web page -->
      <PARAM NAME="boxborder" VALUE="false">
      <!-- Center the image in the applet's area -->
      <PARAM NAME="centerimage" VALUE="true">
   </APPLET>

コマンド行引数と Java プラットフォームバージョンの選択

ここで説明する java_arguments および java_version パラメータは、基本的にどちらも暫定的な手段です。この機能にアクセスするための推奨される方法は、新しい Java Plug-In で JNLP のサポートを使用する方法です。

java_arguments

このアプレットインスタンスの実行時に使用する JVM コマンド行引数を指定します。特定の規則および制限が存在しますが、ほぼすべての JVM コマンド行引数がサポートされます。

  1. デフォルトを超える最大ヒープサイズを指定します。
    <APPLET archive="my_applet.jar" code="MyApplet" width="300" height="300">
        <PARAM name="java_arguments" value="-Xmx128m">
    </APPLET>
  2. デフォルトでないヒープサイズおよび Java 2D ハードウェアアクセラレーションオプションを指定します。通常、これは OpenGLJOGL を介して使用するアプレットで使用します。
    <APPLET archive="my_applet.jar" code="MyApplet" width="300" height="300">
        <PARAM name="java_arguments" value="-Xmx256m -Dsun.java2d.noddraw=true">
    </APPLET>
  3. ガベージコレクタの詳細出力、および Java プログラミング言語の宣言機能を有効にします。
    <APPLET archive="my_applet.jar" code="MyApplet" width="300" height="300">
        <PARAM name="java_arguments" value="-verbose:gc -ea:MyApplet">
    </APPLET>
詳細な説明

「セキュリティー保護された」 JVM コマンド行引数およびシステムプロパティーのセットは、「Java Web Start ガイド」の「JNLP ファイルの構文 」セクションで定義されています。新しいプラグインでは、java_arguments パラメータを使って指定されたすべての JVM コマンド行引数がセキュリティー保護されている限り、アプレットまたはそのロードするすべてのクラスを署名なしにできます。

セキュリティー保護されていない (つまり、セキュリティー保護リストにない) JVM コマンド行引数も、java_arguments パラメータを使って指定できます。この場合、セキュリティー上の危険が潜在的に存在するため、Java Plug-In は署名のないクラスはロードできないという規則を施行します。つまり、この種の JVM インスタンスでは、セキュリティーダイアログをユーザーが受け入れた信頼されるコードのみをロードできます。署名なしの、または信頼されていないクラスを、セキュリティー保護されていないシステムプロパティーの指定されている JVM インスタンスにロードしようとすると、ClassNotFoundException がスローされ、署名がないために指定されたクラスをロードできないことを示します。

java_arguments パラメータを使って渡すことのできるコマンド行引数の制限は、比較的わずかです。一般に、-Xbootclasspath 引数は禁止されています。また、-classpath-jar など、パスの指定に使用するコマンド行引数も使用できません。その他のコマンド行引数はすべて、前述のセキュリティー保護されたコマンド行引数とセキュリティー保護されていないコマンド行引数に関する注意事項に従い、現在も将来もサポートされます。

java_arguments パラメータを使って渡されるコマンド行引数は、Java コントロールパネルの「Java アプレットのランタイム設定」ダイアログで指定された内容に追加されます。コントロールパネルから取得されるコマンド行引数は、指定されたバージョンの JVM インスタンスすべてで使用されます。java_arguments パラメータでこれらが完全に置き換えられるわけではありません(「Java アプレットのランタイム設定」ダイアログも、複数の Java プラットフォームバージョンの管理機能を向上させるために 6u10 で拡張され、現在は Java Web Start で使用される「Java アプレットのランタイム設定」ダイアログと同じ機能を備えている)。

JVM コマンド行引数が指定されている場合、これら引数の条件を満たすために、新しいプラグインが別の JVM インスタンスを起動しなければならない可能性があります。つまり、要求を満たすために、正しいコマンド行引数セットを使って既存の JVM インスタンスが起動されることはあまり考えられません。指定されたアプレットを開始するために新しい JVM インスタンスが起動する場合、正確性規則は意図的に指定されないままになります。それは、これが 6u10 リリースの新機能であり、以降のリリースで変更が必要になることが考えられるためです。次に、新しい JVM インスタンスを共有および作成する際のガイドラインの概要を示します。

  • 既存の JVM インスタンスの起動に使用するコマンド行引数が要求された引数のスーパーセットである場合は、既存の JVM インスタンスが使用されます。
  • JVM インスタンスがコマンド行引数の「デフォルト」 (つまり、java_arguments を使用せずに Java コントロールパネルで指定された) セットで起動される場合、この JVM インスタンスは、java_arguments を使って指定されたコマンド行引数を 1 つだけ含むアプレットの起動にも決して使用されません。
  • -Xmx は特殊な方法で処理されます。たとえば、既存の JVM インスタンスの起動時に java_arguments-Xmx256m が指定された場合、新しいアプレットが -Xmx128m を要求すると、新しいアプレットが既存の JVM インスタンスで実行される可能性が極めて高くなります。つまり、-Xmx の指定は、greater-than-or-equal テストと一致します。

特定のアプレットの起動に使用する JVM に「名前を付ける」ことも、後続のアプレットにその JVM インスタンスを「強制する」こともできません。

特定のアプレットを独自の JVM インスタンス内で隔離して、ほかのすべてのアプレットから分離する方法については、separate_jvm パラメータのセクションを参照してください。

この機能に関するコメントや質問がある場合は、フィードバックをお送りください

java_version

特定のアプレットを起動する Java プラットフォームのバージョンを指定します。

  1. 特定のアプレットで使用する Java プラットフォームのバージョンを指定する
    <APPLET archive="my_applet.jar" code="MyApplet" width="300" height="300">
        <PARAM name="java_version" value="1.5.0_09">
    </APPLET>
  2. 特定のアプレットで使用する、特定ファミリ内の任意の Java プラットフォームを要求する
    <APPLET archive="my_applet.jar" code="MyApplet" width="300" height="300">
        <PARAM name="java_version" value="1.5*">
    </APPLET>

詳細な説明

次世代 Java Plug-In でのバージョン選択サポートおよび関連する下位互換性機構については、別個のドキュメント「新しい Java™ Plug-In テクノロジでの Java™ Runtime Environment のバージョン選択」を参照してください。

separate_jvm

特定のアプレットを独自の JVM インスタンス内で実行するよう指示する boolean 型パラメータ。これがサポートするのは、同じ JVM 内で実行中で、かつヒープ空間などのリソースを消費する可能性のあるほかのアプレットからの干渉を許容できない特定の強力なデスクトップアプレットです。

<APPLET archive="my_applet.jar" code="MyApplet" width="300" height="300">
    <PARAM name="java_arguments" value="...">
    <PARAM name="separate_jvm" value="true">
</APPLET>

クラスローダーのキャッシュ

classloader_cache

通常は、2 つのアプレットが同じ codebase および archive パラメータを保持する場合、これらは同じクラスローダーインスタンスによりロードされます。この動作は下位互換性を維持するために必要であり、実在するいくつかのアプリケーションはこれを前提に動作しています。これにより、同一の Web ページ上にある複数のアプレットが Java 言語レベルで互いの静的変数にアクセスすることが可能になります。また、複数のアプレットを、それらが単一のアプリケーションを構成しているかのように効率的に書き込むこともできます。

この機能には、ある種のアプリケーションを書き込むことができる便利な面がある一方で、いくつかの欠点もあります。これは、特に、1 つのアプレットの複数のインスタンスがアクティブである場合に、アプレットの終了に干渉します。また、アプレットのプログラミングモデルがより複雑になります。これは、アプレットの静的フィールドを再初期化する場合、および 1 つのアプレットの実行間でこれらの静的フィールドが維持される場合に、この機能の指定にあいまいさが残るためです。これにより、特定の要求を開始したアプレットを正確に識別できないために、Java Plug-In 内部で特定のユーザーインタフェースの動作が不正確になります。

こうした理由で、新しいプラグインは、クラスローダーキャッシュの使用に基づいて最適化をアプレット単位で実行する方法を提供します。

<APPLET archive="my_applet.jar" code="MyApplet" width="300" height="300">
    <PARAM name="classloader_cache" value="false">
</APPLET>

classloader_cache パラメータのデフォルト値は true です。クラスローダーキャッシュはデフォルトで有効です。

Java コントロールパネルの変更

アプレットのランタイム設定

Java コントロールパネルは、Java Plug-In の新機能をサポートするように拡張されました。特に注目すべきなのは、アプレットの実行に使用する複数の Java プラットフォームバージョンを管理する機能に対応したことです。グローバルなアプレット設定を変更するための「Java アプレットのランタイム設定」ダイアログボックスは、Java Web Start で使用する「Java アプリケーションのランタイム設定」ダイアログボックスと同じ制御レベルを提供するようになりました。

ユーザーが、Java プラットフォームを明示的にリストに追加したり、リストから削除したりできるようになりました。Windows プラットフォームでは、インストールされたすべての Java プラットフォームがリストに自動的に含められます。「検索」ボタンを使用すると、ローカルディスクに解凍されただけでインストールされていない、追加の Java プラットフォームをすばやく構成できます。特定バージョンの Java プラットフォーム上で実行する特定アプレットの要求について考慮する際、「有効」チェックボックスを使って、どの Java プラットフォームを新しい Java Plug-In が使用するかを制御できます。

これまでと同様、「Java ランタイムパラメータ」フィールドを使って、特定の Java プラットフォームバージョンで実行するアプレットすべてに適用されるコマンド行引数を指定できます。ただしこれからは、Java Plug-In の新機能を使用して、グローバルではなくアプレットごとにコマンド行引数を指定することをお勧めします。とはいえ、Java コントロールパネルを使用することで最も効率的に指定できる数種類のコマンド行引数が存在します。開発によく使用される -Xdebug はその一例です。

新しいプラグインと従来のプラグインの切り替え

互換性を維持するため、新しい Java Plug-In と従来の Java Plug-In がともに提供されています。コンテンツが新しい Java Plug-In で適切に動作しない場合は、従来のプラグインの使用に切り替えることができます。

Windows プラットフォームのみ、この設定を Java コントロールパネルで行えます。「詳細」タブの「Java Plug-In」 ノード内にあるチェックボックスを使って、従来のプラグインと新しいプラグインを切り替えることができます。この設定を変更したあとで、変更を有効にするために Web ブラウザを再起動する必要があります。

Linux および Solaris プラットフォームの場合は、libnpjp2.so へのシンボリックリンクを従来のプラグイン libjavaplugin_oji.so へのシンボリックリンクに置き換えます。現在のところ、これは手作業で行う必要があります。

従来の Java Plug-In で正しく動作するが、新しい Java Plug-In では正しく動作しないアプレットコンテンツを見つけた場合は、この非互換性の問題を Java Plug-In forum に報告してください。

新しい LiveConnect の使用

これまで非公式に LiveConnect と呼ばれていた、Java と JavaScript プログラミング言語間のブリッジが再実装されました。新しい実装は、下位互換性の維持に加え、Java による JavaScript の呼び出しと JavaScript による Java の呼び出しの両面での信頼性、パフォーマンス、およびブラウザ間相互の移植性向上を特徴としています。静的 Java メソッドの呼び出し、新規 Java オブジェクトのインスタンス化、および Sun 以外のパッケージの JavaScript からの読み出しなど、以前の Mozilla 固有の LiveConnect 機能がすべてのブラウザで利用可能になりました。

新しい LiveConnect の仕様は、近日中に公開される予定です。

実験的機能

Java SE 6 Update 10 で、Sun Microsystems, Inc. はインターネット上でアプリケーションを配備するための新しいパラダイムを導入します。 実行中のアプレットを Web ブラウザからドラッグして取り出し、デスクトップ上で実行するアプリケーションに動的に変換する機能です。 アプリケーションは、標準の JNLP および Java Web Start テクノロジを使用して、デスクトップのショートカットまたは起動メニュー項目から起動し直すことがきます。 これは Java プラットフォーム独自の機能で、開発および Web ブラウザとデスクトップ上の配備との、完全な統合をもたらします。

この機能は現在実験的なものとされており、将来のリリースでは変更または削除される場合があります。 その点にご注意いただき、この機能に関するコメント、提案およびその他のフィードバックを、具体的に Java Plug-In forum 経由で Sun までお寄せください。

個々のアプレットを Web ブラウザからドラッグして取り出せるようにするには、<applet> タグに次のパラメータを追加します。

<param name="draggable" value="true">

デフォルトでは、アプレットを Web ブラウザからドラッグして取り出すジェスチャーは、Alt + 左クリック + ドラッグです。 一部のプラットフォーム (特に X11) で、ウィンドウマネージャーにより、このジェスチャーはすべてのウィンドウをデスクトップ上で移動するものとして解釈されます。 アプレットクラスに public な isAppletDragStart メソッドを指定すると、実際にドラッグ操作を開始するジェスチャーを厳密にカスタマイズできます。

public boolean isAppletDragStart(MouseEvent e);

このメソッドは、アプレットまたはそのサブコンポーネントのいずれかの上で発生する、対象となるそれぞれの MouseEvent に対して呼び出されます。 このメソッドからアプレットが最初に true を返すとき、Java Plug-In はドラッグ操作を開始し、アプレットにマウスポインタを追跡させます。 現時点では暗黙的に、マウスボタン 1 を含むマウスを離すイベントでドラッグ操作が終了するものと見なされ、アプレットをデスクトップ上に配置します。

アプレットをデスクトップ上にドロップしたあとでも、ドラッグジェスチャーを使用して画面上を移動させることができます。 画面上を移動する操作が繰り返されると、isAppletDragStart メソッドが引き続き呼び出されます。 次に説明する通知メソッドを使用して、アプレットをデスクトップ上にドロップする前後の動作を、希望に応じて変更できます。

ドラッグ操作が始まるとき、Web ページ内の元の親コンテナからアプレットが削除され、新しい、装飾されていないトップレベルウィンドウに配置されます。 java.applet.Applet のサブクラス化にはアプレットに Frame が使用され、javax.swing.JApplet のサブクラス化にはアプレットに JFrame が使用されます。

アプレットが次のメソッドを提供する場合は、

public void appletDragStarted();
これが呼び出されるのは次のような場合です。
  • アプレットが元の親から削除された
  • 新しい未装飾のトップレベル Frame または JFrame 上に配置された
  • 新しい Frame または JFrame がまだ可視でない
これによって、フレームの装飾の状態を変更したり、フレームを半透明にする 6u10 での実験的機能を使用したり (形成された「ウィジェット」の構築に便利)、その他の操作を実行したりすることができます。 アプレットが次のメソッドを提供する場合は、
public void appletDragFinished();
アプレットがデスクトップ上にドロップされたとき 1 度だけ呼び出されます。

デフォルトでは、アプレットの領域の右上に小さい「閉じる」フローティングボタンが描画され、画面上を移動するアプレットを追跡します。 このユーザーインタフェースはカスタマイズできます。 アプレットが次のメソッドを定義する場合は、

public void setAppletCloseListener(ActionListener l);
アプレットはその領域内に独自の閉じるボタンを描画するものとみなされます。 この場合、Java Plug-In が行なった上記のメソッド呼び出しに対して渡される ActionListener オブジェクトを保存し、その actionPerformed メソッドを呼び出して、ユーザーの入力に応答してアプレットの停止を開始することをお勧めします。 actionPerformed メソッドに対する ActionEvent 引数は null である可能性があり、無視されます。

アプレットを含む元の Web ページがまだ可視である間にユーザーが閉じるボタンをクリックした場合、アプレットはページ上の元の位置に配置され、メソッドの

public void appletRestored();
が呼び出されます。 アプレットがブラウザから切断された場合 (下記参照)、通常のアプレット停止が開始されます。 stop および destroy メソッドが呼び出されます。

ユーザーが Web ページからアプレットをドラッグして取り出してから別の Web ページへ移動したり、Web ブラウザを終了させたりした場合は、アプレットは Web ブラウザから概念的に「切断」されます。 つまり、一部のサービス、Java/JavaScript 通信などが無効になります。 その他のブラウザサービス、AppletContext.showDocument() の実装などは、それほどきめ細かく制御できるわけではない別の実装に置き換えられます。 具体的は、次のような場合です。

  • Java から JavaScript を netscape.javascript.JSObject クラス経由で呼び出そうとすると、JSException が発生します。
  • AppletContext.showDocument を呼び出すと、新しいブラウザのウィンドウが開きます。 showDocument(URL url, String target) への呼び出しが実行されると、ターゲットは無視されます。
  • AppletContext.showStatus への呼び出しでは、ブラウザのステータスバーではなく Java コンソール内 (開いていると仮定) の文字列が表示されます。
  • プロキシ設定およびクッキーの照会は、通常は Web ブラウザへリダイレクトされますが、プラットフォーム固有の設定によって処理されます。 たとえば Windows プラットフォームの場合、最初に Firefox がアプレットの起動に使用された場合でも、Internet Explorer のプロキシ設定が暗黙的にシステム全体のプロキシ設定となっているため、アプレットが切断された場合その設定が使用されます。
以上の相違点以外では、アプレットが切断されても通常のアプレットとまったく同じ動作をします。 セキュリティーモデルへの変更はなく、署名されていないアプレットはセキュリティーサンドボックス内で引き続き実行されます。 実際、切断されたアプレットは基本的に Java Web Start アプリケーションとまったく同様の動作をします。

ドラッグ可能なアプレット機能と組み合わせて、新しい Java Plug-In での JNLP サポートを使用してアプレットを記述すると、大幅な統合が実現します。 この場合、アプレットは、ブラウザから切断されると Java Web Start のアプリケーションとして正確に変換されます。 新しい jnlp_href アプレットパラメータが使用され、デスクトップショートカットまたはスタートメニューオプションの追加を要求するために JNLP ファイルに shortcut タグが追加される場合、(Java コントロールパネルの設定によって異なりますが、通常はユーザーがダイアログボックスを確認したあと) アプレットが Web ブラウザから切断されるとショートカットが作成されます。 ショートカットをダブルクリックすると、アプレットを起動し直すことができます。 つまり、アプレットをブラウザから取り出してドラッグする操作は、アプリケーションをインストールする手順として使用できます。

デスクトップショートカットからアプレットを起動する際、appletDragStarted および appletDragFinished メソッドが、アプレットをブラウザからドラッグして取り出したときと同じ条件下で引き続き呼び出されるため、設定コードを記述するのは 1 度で済み、ショートカットから起動し直した場合でも引き続き動作します。

注: ショートカットを作成すると、アプレットの JNLP ファイル内の jnlp タグに絶対コードベースを「必ず」使用しなければならないことに注意してください。 残念ながらこれは、コードベースを指定しないでおき、Web ブラウザからピックアップできるようにするという、新しい Java Plug-In の配備用ベストプラクティスのためのアドバイスに従った方法ではありません。 以降のビルドでは、この動作を改善したいと考えています。 さらに、ショートカットから起動し直す際、ブラウザはアプレットのサイズを計測することはできないため、デスクトップショートカットがアプレットのサイズを正確に計測できるよう、JNLP ファイル内の applet-desc タグで目的の幅と高さを指定してください。 これも、以降のビルドでは改善される予定です。

上記の機能を示すいくつかの例を示します。 次のアプレットは、アプレットの上部にある赤いバーを左クリックおよびドラッグして、ブラウザからドラッグして取り出すことができます。 アプレットは isAppletDragStart メソッドを定義し、このようにドラッグジェスチャーを変更します。 1 度ドラッグして取り出したら、アプレットの右上隅にある小さな「X」をクリックして閉じることができます。 アプレットは setAppletCloseListener メソッドを定義して、閉じるボタンの視覚的な制御を獲得します。 アプレットがブラウザから切断された場合、デスクトップショートカットを作成するプロンプトが表示されます。 これは、アプレットの JNLP ファイルの <shortcut> タグを使用することで実現します。 ショートカットアイコンをダブルクリックすると、Web ブラウザを開かずにアプレットを起動し直すことができます。

次のアプレットは新しい Java Plug-In を必要とし、現在 IE 6 および Firefox 3 の初期アクセスビルドで動作します。 Firefox 2 では動作しません。

アプレット上の 2 つのボタンは、ブラウザから切断されたときにアプレットに提供されているサービスがどのように変化するかを示しています。 「Reopen Web Page」ボタンをクリックすると AppletContext.showDocument() API を使用して、ブラウザをアプレットの元のページへ移動します。 アプレットをホストしている元の Web ページがまだ表示されている間にこのボタンをクリックした場合、基本的に再ロードが強制的に行われアプレットがブラウザから切断されます。 ただし、アプレットが切断されると、このボタンをクリックした際に新しい Web ブラウザのウィンドウが開き、こうして JNLP BrowserService API が動作します。 これは、アプレットがブラウザから切断されると、ブラウザのインスタンスとは通信できなくなるためです。

「Show Applet Status」ボタンをクリックすると、アプレットがブラウザに接続している間はブラウザのステータスバーを変更し、アプレットがブラウザから切断されると Java コンソールにその出力を出力します。

この例のソースコードは、次の場所からダウンロードできます。

デモ

Java Plug-In の新機能のデモが利用可能になりました。

フィードバック

次世代 Java Plug-In に関するフィードバックを Java Plug-In forum までお送りください。

次世代 Java Plug-In のバグを発見した場合は、Sun Bug Reporterを使って報告してください。最初に、Sun Bug DatabaseJava Plugin カテゴリ内にあるサブカテゴリ plugin2 で、バグがすでに報告済みかどうかを確認してください。バグを提出するときは、「Product/Category」に「Java Plug-in」を、「Subcategory」に「plugin2」を指定して、次の情報を入力してください。

  • オペレーティングシステムの名前とバージョン
  • Web ブラウザの名前とバージョン
  • 動作しないアプレットの URL (自己完結型のテストケースであればなお良い)
  • アプレットの実行方法および障害の再現方法に関する明確な指示
  • 障害モードの内容 (つまり、期待される動作と現実の動作)
  • Java コンソールの出力 (Java コントロールパネルの「詳細」タブで Java コンソールを有効にする)
  • ログ出力 (Java コントロールパネルの「詳細」タブでロギングを有効にする)
    • Windows:ログの格納場所の例: C:/Documents and Settings/[username]/Application Data/Sun/Java/Deployment/log/
    • Unix:ログの格納場所: ~/.java/deployment/log/
    正しいログおよびトレースファイルを見つけてお送りください。

Java SE Site Map
 
英語版のダウンロードページ
英語版  
 
関連リソース