トラブルシューティング


このセクションでは、次のトピックについて説明します。

一般的なトラブルシューティング

Q. HTTPS サイトからアプレットにアクセスしようとすると、javax.net.ssl.SSLException (または、ハングアップや接続の切断) が発生します。なぜですか。

一部の SSL/TLS サーバでは、受信したクライアントメッセージの形式を判断できない場合や、このメッセージのプロトコルのバージョンがサポート対象外である場合に、この問題が発生します。問題はサーバ側にあります。SSL/TLS の機能のいくつかが正しく実装されていない可能性があります。SSLv3 だけを認識するサーバは、クライアントから TLSv1 (aka SSLv3.1) hello を受信すると、SSLv3 server hello (aka SSLv3.0) で応答することになっています。ただし、ここではサーバがそのように動作していないので、SSLException 例外が発生します。

Java Plug-in 1.3.x では、SSL のブラウザ実装が使用されていました。Netscape 4.x と Internet Explorer では、SSLv3.0 実装だけが提供されています。Plug-in のこのバージョンでは、SSLv3.0 だけが使用されるので、この問題は発生しません。

Java Plug-in 1.4.0 では、TLS/SSL の JSSE 実装が使用されていました。デフォルトでは、JSSE では TLSv1、SSLv3、および SSLv2Hello プロトコルが有効になります。Plug-in のこのバージョンでは、TLSv1 が使用されるので、プロトコルが正しく実装されていないサーバでこの問題が発生する可能性があります。

次に、この問題の回避方法をいくつか示します。TLSv1 プロトコルを無効にし、SSLv3 だけを使用してください。

1. Java Plug-in コントロールパネル ([詳細] タブ) で、次のように指定します。

-Dhttps.protocols="SSLv3,SSLv2Hello"

2. システムプロパティを次のように指定します。

System.setProperty("https.protocols", "SSLv3");

3. ソケットへのアクセス権を持っていれば、次の操作が可能です。

socket.setEnabledProtocols("SSLv3");

Java Plug-in 1.4.1 では、SSLv3 と SSLv2Hello プロトコルがデフォルトで使用されます。SSLv3 はほとんどのブラウザでデフォルトとして使用され、ほとんどの Web サーバでもサポートされています。このことから、また上記の問題を防ぐためにも、Plug-in のこのバージョンには変更が加えられました。TLSv1 を使用する必要がある場合、ユーザは https.protocols の設定を行う必要があります。

Q: アプレットの含まれているページに関して、変更された JAR ファイルがサーバにあるかどうかを JVM で強制的にチェックするには、ブラウザを再起動する以外に方法がありますか。

A: あらかじめ Java コンソールに「x」と入力して、クラスローダキャッシュをクリアしておくと、アプレットの含まれているページを再表示するか、そのページに再び戻ったときに、変更された JAR ファイルがサーバからダウンロードされます。

Q: http://games.yahoo.com でゲームをしようとすると、ControlAccessException が発生します。何が問題なのですか。回避策はありますか。

A: ゲームアプレットには、1 つ以上のサーバに接続するためのアクセス権が必要ですが、セキュリティ上の理由によりアクセス権が拒否されています。回避策としては、java.policy ファイルに次のように追加してください。

grant codeBase "http://download.yahoo.com/games/clients/" {
      permission java.net.SocketPermission "*","connect";};

java.policy<JRE installation directory>/Java/j2re1.4.0/lib/security/ にあります。

Q: Java Plug-in の含まれている J2SE をダウンロードしてインストールした場合、Netscape でそのプラグインを探すにはどうしたらいいですか。

A: 環境変数 NPX_PLUGIN_PATH を Java Plug-in の位置 (javaplugin.so ファイルの格納先ディレクトリ) に設定します。

Netscape 4 の場合は、NPX_PLUGIN_PATH=$JAVAHOME/jre/plugin/sparc/ns4
Netscape 6 の場合は、NPX_PLUGIN_PATH=$JAVAHOME/jre/plugin/sparc/ns6

Q: Java Plug-in ソフトウェアを Netscape Enterprise 3.0 SuiteSpot Web サーバ上に配置しましたが、イントラネット環境でのインストールを実行できません。なぜですか。

A: Netscape Enterprise 3.0 SuiteSpot Web サーバは、少なくともある状況下では .exe ファイルを処理できないという報告が届いています。明らかになった 1 つの回避策は、Visigenic Orb Gatekeeper (Web サーバとして機能する) により Java Plug-in 製品がインストールされるよう、HTML を構成することです。

Q: Java Plug-in ソフトウェアのデバッグで問題に遭遇しています。何かヒントはありませんか。

A: ある状況下では、Java Plug-in ソフトウェアが、予期しないデバッグ接続アドレスを使用する場合があります。これは、Java Plug-in ソフトウェアが、次のいずれかの構成で稼動する Explorer.exe のプロセス内にロードされた場合に発生します。

OBJECT タグを含む HTML ページを次の方法で表示する場合、Java Plug-in が Explorer.exe プロセス内にロードされます。

この場合、2 つのプロセスが同じデバッグ接続アドレスを使用するため、Java アプレットのデバッグで問題が発生する可能性があります。(接続アドレスの設定については、「デバッグのサポート」「Java Plug-in でのアプレットのデバッグ方法」を参照してください。)Explorer.exe プロセスがデバッグ接続アドレスを要求済みの状態で、Netscape.exe または Iexplorer.exe がその使用を試みると、デバッグで問題が発生します。

Java Plug-in ソフトウェアは、Explorer.exe プロセスへのロード時に、[コントロールパネル] で指定されたデバッグ接続アドレスの前に Explorer 文字列を追加することで、この問題を回避します。

たとえば、Java Plug-in ソフトウェアのインストール時に設定されたデフォルト接続アドレスが 2502 の場合、Explorer.exe 内での実際の接続アドレスは Explorer:2502 になります。

Java 2 SDK から JDB を実行する場合、次のように指定する必要があります。

jdb -attach Explorer:2502

この場合、接続は Explorer.exe プロセス内にロードされた JVM に対して行われます。

Q: Internet Explorer で Java Plug-in を使用したらアプレットがスクリプト可能でなくなりました。なぜですか。

A: Java Plug-in ソフトウェア 1.3 でアプレットのスクリプトを可能にするには、scriptable タグを追加し、それに true の値を設定する必要があります。詳細は、「Java Plug-in における OBJECTEMBED および APPLET タグの使用」 を参照してください。

Q: 標準拡張機能やオプションパッケージの使用で問題が発生します。なぜですか。

A: <jre>\lib\ext ディレクトリにインストールされた拡張機能だけがクラスパスに追加されます。java.ext.dirs システムプロパティの指し示すディレクトリにインストールした拡張機能は、追加されません。

Q: Java Plug-in は、Navigator 4.0.x ブラウザでは動作していました。その後、Navigator 4.5 にアップグレードして Java Plug-in を再インストールしたところ、Navigator 4.5 で動作しなくなりました。なぜですか。

A: Navigator 4.5 のインストール時に、ユーザプロファイルが適正にインストールされない場合があることが報告されています。その場合、Java Plug-in ソフトウェアは適切なユーザプロファイル設定を読み取ることができません。ユーザプロファイル設定が適正であることを確認するために、以下をチェックしてください。

これら 2 つのレジストリキーが存在すること、および <DirRoot> が既存のユーザプロファイルを指定していることを確認してください。いずれかのレジストリキーが存在しないか不完全な場合、User Profile Manager ツールを使用してプロファイルを再作成してください。

Q: Java Plug-in で Java 3D の使用を試みていますが、動作しません。なぜですか。

A: Java 3D にはさまざまなパッケージが付属しています。不正な方法でインストールすると、意図せずに Java Plug-in を無効にしてしまったり、障害を発生させる可能性があります。Java 3D と Java Plug-in ソフトウェアを使用する場合、次の一般的な手順に従ってください。

  1. 最初に Java Plug-in をインストール
  2. Java 3D を新規ディレクトリにインストール。既存の Java 2 SDK, Standard Edition/JRE に上書きインストールしない。インストール方法の詳細は、このページを参照
  3. Java 3D に適切な SDK/JRE のバージョンがまだコンピュータにインストールされていなければ、インストール
  4. Java Plug-in コントロールパネルで、適切なバージョンの SDK/JRE を選択
これで、Java Plug-in 内で Java 3D デモが動作するはずです。

Q: Web/プロキシサーバの中には、認証用にユーザのログインを要求するものがあります。Java Plug-in を使用するこのサーバにブラウザからアクセスすると、ログインダイアログボックスが 2 つ表示されます。なぜですか。

A: 通常 Java Plug-in は独自の接続を使用してアプレットをダウンロードします。Web/プロキシサーバがログインを要求する場合、ブラウザは要求に遭遇すると、ログインダイアログボックスを表示します。HTML ページのダウンロード後に、Java Plug-in はアプレットのクラスまたは jar ファイルのダウンロードを試みます。ただし、Java Plug-in は、ブラウザが前に取得したログイン情報にアクセスできない場合、独自のログインダイアログボックスを表示します。

Q: Java Plug-in をイントラネット内に配備して、内部の Web サーバにバイナリを配置しようとしています。しかし、IE が変換済みのページに遭遇しても、Java Plug-in ソフトウェアのダウンロードおよびインストールは実行されません。どうなっているのですか。 

A: OBJECT タグの CODEBASE に Java Plug-in の正しい URL が指定されているかどうかをチェックしてください。さらに、Java Plug-in ソフトウェアの実行可能ファイルを配置したディレクトリの実行権限を無効にすると問題が解決されることがあります。

Q: Java Plug-in ソフトウェアを使用してアプレットのレンダリングを行おうとしていますが、うまくいきません。原因は何でしょうか。

A: 使用するオペレーティング環境に独特のさまざまな状況が考えられますが、しばしばこの問題を引き起こす原因の 1 つにセキュリティ例外があります。

  Q: Java Plug-in ソフトウェアの実行中にブラウザ設定を変更しましたが、変更後も以前の設定が使用されています。なぜですか。

A: ブラウザの設定は、Java Plug-in の起動時に読み込まれます。これらの設定は、ブラウザセッションの有効期間中、ずっと有効になります。Java Plug-in に新しい設定を読み込ませるには、ブラウザを再起動してください。Java Plug-in とともにアクティブデスクトップを実行している場合、コンピュータを再起動する必要があります。

Q: アプレットをロードすると、ブラウザのステータスバーに「noninit」または「applet not initialized」というメッセージが表示されます。問題の原因を識別する方法を教えてください。

A: 次の手順を実行します。

  1. Java コンソールに表示されるエラーメッセージを確認
  2. ネットワーク経由でアプレットにアクセスしている場合、Java コンソールに表示されたプロキシ情報が正確であることを確認
  3. すべてのクラスや JAR ファイルが、適切なディレクトリ内にあることを確認
  4. 変換された HTML ページが適正であることを確認
  5. 未変換のページを、同じマシンのアプレットビューアで実行。正常に動作する場合、手順 3、4、および 5 を確認

Q: Java Plug-in ソフトウェア で AppletClassLoader を使用する場合、IE4 では null ポインタ例外でクラッシュしますが、Netscape では正常に動作します。なぜですか。IE4 で正常に動作させる方法がありますか。

A: IE4 の Java Plug-in ソフトウェアは、アプレットが Bean ではない場合でも、<YourAppletName>BeanInfo.class をロードしようとします。Java 2 SDK, Standard Edition v 1.3 の AppletClassLoader にはバグがあり、存在しないクラスをロードしようとする場合に表面化します。この問題の発生を防ぐには、空の <YourAppletName>BeanInfo.class を作成してください。

Q: Java Plug-in ソフトウェアは、Internet Explorer では時々クラッシュしますが、Netscape Navigator ではクラッシュしません。なぜですか。

A: 特定の状況下では、不正な HTML のためにブラウザがクラッシュすることがあります。1 つの例は、</XMP> タグが存在しない場合です。HTML が適正であることを確認してください。

別の可能性は、プラグインに対応したページにアクセスする前に、コントロールパネルでプラグインが無効に設定されている場合です。プラグインが有効かどうか、設定を確認してください。

Q: 以前は、アプレットにより、ページを切り替えてもずっと表示されるトップレベルのフレームが作成されていました。Java Plug-in にアップグレードしてからは、トップレベルのフレームが作成されなくなりました。なぜですか。

A: Java Plug-in ソフトウェアでは、ページの切り替え時にアプレットが停止および破棄されます。すべての可視コンポーネントも、同様に破棄されます。Java 2 SDKでは機能の拡張により、トップレベルのフレームを含む、アプレットのリソースすべてが適正に解放されることが保証されるようになりました。  

インストールに関するトラブルシューティング

Q: ネットワークドライブに Java Plug-in のインストールを試みていますが、インストールできません。なぜですか。 

A: ネットワークドライブがプロテクトされているか、読み取り専用の場合、Java Plug-in ソフトウェアはインストールできません。詳細はシステム管理者に確認してください。

Q: Java Plug-in をインストールしようとしているのですが、インストールプログラムが Netscape Navigator 用の Java Plug-in をインストールしようとするたびにエラーが表示されます。▼使用している Navigator は、ネットワークドライブ上にあります。この問題を解決する方法はありますか。 

A: 使用する Navigator がネットワークドライブにインストールされている場合、プラグイン DLL を Navigator Plugins ディレクトリにインストールする権限がありません。詳細はシステム管理者に確認してください。

Q: Microsoft Windows マシンに Java Plug-in をインストールできません。「An application error has occurred and an application error log is being generated.Exception: access violation ...」というエラーが表示されてしまいます。何が問題なのですか。 

A: バックグラウンドで Quarterdeck の Cleansweep 製品が動作していると、Microsoft Windows インストール (Installshield のインストールプログラム) は正常に機能しません。

Q: Java Plug-in ソフトウェアのアンインストール後に再起動すると、.cpl ファイルが削除されたことを警告するダイアログボックスが表示されます。これはどういう意味ですか。

A: Java Plug-in コントロールパネルを開いた状態でアンインストールを実行しても、plugincpl.cpl はロックされているため、削除することはできません。

Q: Java Plug-in をアンインストールしましたが、Netscape 用の Microsoft Windows プラグインがマシンに残っているようです。どうしたら削除できますか。 

A: Netscape の Plugins ディレクトリから NPJPI<modified version number>.dll を削除します。たとえば、Java Plug-in 1.4.0 では、Plugins ディレクトリから NPJPI140.dll を削除します。

セキュリティに関するトラブルシューティング

Q: 使用しているアプレットでセキュリティ関連の問題が発生します。デバッグ方法を教えてください。

A: java.security.debug プロパティを有効にすることで、セキュリティシステムからのトレースメッセージを有効にできます。詳細は、「デバッグのサポート」という章の「java.security.debug プロパティ」を参照してください。

Q: インターネットからアプレットをダウンロードしているときに AccessControlExcpetion がスローされます。ただし、アプレットがイントラネットに存在する場合は、正常に動作します。なぜですか。

A: DNS の不正行為を防ぐため、アプレットからの接続を確立する前に、Java Plug-in のセキュリティチェックでホスト名を IP アドレスに解決することが求められます。ただし、このセキュリティチェックには副作用があり、イントラネットの DNS サーバに対し、インターネットからの外部ホスト名すべての解決が求められます。カスタマの企業内 DNS サーバがこれに対応する方法で設定されていない場合、Java Plug-in は失敗します。この問題を解決する方法として、次の選択肢があります。

  1. アプレットの HTML ページを変更して、アプレットのコードベースおよびドキュメントベースに、ホスト名ではなく IP アドレスを含めるようにします。これにより、Java Plug-in によるホスト名の DNS ルックアップ実行を防ぎます。
  2. Java Plug-in で、trustProxy を true に設定します。このプロパティを設定することにより、Java Plug-in は、プロキシが適切な DNS ルックアップを実行し、信頼されるホストから Java Plug-in に情報を返すことを信頼します。イントラネットカスタマのプロキシサーバが内部で設定されており、信頼できる場合、このプロパティを使用できます。このプロパティは、Java Plug-in コントロールパネルで -DtrustProxy=true と指定します。

    このプロパティは、管理者で設定する必要があります。信頼されないプロキシサーバを使用して、このプロパティを不適切な方法で設定すると、クライアントマシンが DNS の不正行為にさらされる可能性があります。このプロパティは、Netscape Navigator の JVM がサポートする security.lower_java_network_security_by_trusting_proxies プロパティに類似しています。

Q: Web ページが、HTTPS を使用して Netscape Navigator にロードされると、ClassFormatError 例外がスローされます。なぜですか。

A: これは、アプレットの EMBED タグに、存在しない .jar または .class ファイルが指定されている場合に発生します。Navigator では、HTTPS 経由で返すことのできる情報に制限が存在するため、適切なステータスの代わりに Web サーバの「ファイルが見つかりません」という HTML ページが返されます。この HTML ページは、例外を発生させる .class ファイルとして処理されます。

Q: Java Plug-in で RSA 署名付きアプレットを実行しようとしましたが、信頼されないアプレットとして処理されてしまいます。何が問題なのですか。

A: いくつかの可能性が考えられます。

詳細は、「RSA 署名付き証明書を使用したアプレットの署名方法」を参照してください。

Q: Java Plug-in を使用すると、アプレットのフレーム上に黄色いバナーが表示されます。なぜですか。

A: アプレットが独立したフレームを作成する場合、Java Plug-in は黄色い警告バナーを追加して、信頼されないアプレットウィンドウが使用されていることを通知します。

Q: フレーム上に表示される黄色い警告バナーを無効にできますか。 

A: 黄色い警告バナーは重要なセキュリティ機能であるため、信頼されないアプレットから無効にすることはできません。

署名付きアプレットを使用している場合は、署名キーがエンドユーザにより信頼されているのであれば、警告バナーは表示されません。

Q: 警告バナーが GUI 上を覆ってしまうことを防ぐにはどうしたらよいですか。 

A: 開発者向け FAQ に同じ質問があるので、そちらを参照してください。

Q: InetAddress.getLocalHost().getHostName() が「localhost」を返します。なぜですか。

A: 開発者向け FAQ に同じ質問があるので、そちらを参照してください。