このトピックでは、JavaまたはJavaFXアプリケーションのデプロイ中に問題が発生した場合に試行するトラブルシューティングのヒントについて説明します。
この節の内容は以下のとおりです。
アプリケーションのパッケージ化後にアプリケーションの実行で問題が発生した場合、次のチェックリストを使用します。
サポートされている環境があることを確認します。
リリース・ノートで既知の問題を確認します。
次の各項のヒントが問題の解決に役立たない場合は、次のアクションを提案します。
JavaおよびJavaFXフォーラムで専門家に尋ねます。
JIRAへのバグをファイルします。
何を行おうとしているか、および何が期待どおりに正確に動作しないかを詳細に説明します。可能な場合、テスト・ケースを共有して、問題を再現します。ご使用の環境と、JavaおよびJavaFXバージョンに関する情報が必ず含まれているようにします。
最新バージョンのパッケージ化ツールを使用していることを確認します。
javapackager
コマンドの失敗:
javapackager
ツールが置かれているJDK binフォルダがPATH
にあることを確認します。
JAVA_HOMEが設定されていることを確認します。
OS Xでは、問題の原因は、AppleのJDK 6とOracleのJDK 7またはJDK 8を同時に使用したことである可能性があります。この問題に対処するには、JAVA_HOMEを設定し、パスに追加します。
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_06.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
自己完結型アプリケーションのパッケージ化:
ビルドしようとしているパッケージ形式がサード・パーティ製ツールに依存している場合、そのツールがPATH
で使用できることを確認します。
verbose="true"
を<fx:deploy>
タスクに設定するか、"-v"
をjavapackager
に渡して、冗長ビルド出力を取得します。
環境変数JAVAFX_ANT_DEBUG
をtrue
に設定して、詳細を取得し、中間ビルド・アーティファクトを保持します。
ドロップイン・カスタム・リソースが使用されていない場合、JavaFX Antタスク定義が正しいクラスパス(通常は先頭に"."が付いている)を使用してロードされていることを確認します。10.3項「JavaFX Antタスクの使用」を参照してください。
リモート・システムでの自己完結型アプリケーションのパッケージ化:
パッケージ化ツールをリモート・システム(たとえば、Jenkins、Hudson、および他のビルド・システム)上で実行してアーティファクトを生成する場合、同じユーザーがデスクトップ・システムにログオンしていることが重要です。同じユーザー・ログインの使用が不可能な場合、次の手順を使用して、カスタム.dmgバンドルを作成できます。
手動ビルドから.dmgイメージを作成します。
.dmgファイルを読取り/書込み形式に変換します。
アプリケーション・フォルダの内容を削除しますが、トップ・レベルのアプリケーション・ディレクトリは保持します。
dmgをビルドに追加します。
ビルド時に、これをマウントし、.appコンテンツをイメージにコピーしてから、.dmgを圧縮された読取り専用形式に変換します。
NetBeansの問題:
NetBeans 7.2以降を使用していることを確認します。JavaFXの機能を使用するには、NetBeans 8.0以降が必要です。
「消去してビルド」がサンプル・アプリケーションのビルドに失敗したか、一部またはすべてのファイルをダブルクリックした結果エラーになる場合、JavaFXプラットフォームがNetBeansで適切に有効化されていることを確認します。
ビルド・プロセスを詳細に理解するには、ビルド出力ウィンドウの「ツール」アイコンをクリックすることで、冗長出力を有効にします。
自己完結型アプリケーションをビルドするには、NetBeansを起動する前に、必要なサード・パーティ製ツールがPATH
に追加されていることを確認します。7.4項「インストール可能なパッケージ」を参照してください。
基本的なチェックリスト:
最新バージョンのJavaがインストールされていることを確認します(Java 8以降)。
JavaFXアプリケーションでは、アプリケーションをトラブルシューティングしようとする前に、JavaFXサンプルが適切に実行されていることを確認します。
少なくとも1つのサンプルに対して、JARファイル、JNLPファイルおよびHTMLファイルをダブルクリックして、正しく実行されていることを確認します。
java
プロセスが、JREがインストールされている場所を使用していることを検証します。
64ビット・システムが稼働している場合、32ビットまたは64ビットのいずれかのバージョンのJavaを使用している可能性があります。予期せずにJREの古いバージョンを使用することにより発生する問題を回避するための最適な方法は、32ビットと64ビットの両方のバージョンのJavaを最新にしておくことです。
コマンド行から
java -jar MyApp.jar
と同じアプリケーションを実行します。
この方法で、実際の例外およびトレース・メッセージ(存在する場合)を表示できます。
-Djavafx.verbose=true
を渡して、埋込み起動ツールからの冗長出力を有効にします。
アプリケーション起動の速度が遅い場合、ネットワーク構成が原因である可能性があります。-Djavafx.autoproxy.disable=true
を渡すことで自動プロキシ構成を無効化してみて、有用であるかどうかを確認します。
ネイティブ起動ツールをコンソール・ウィンドウから実行して、トレース・メッセージなどを表示します。
OS Xでは、起動ツールはMyApp.app/Contents/MacOS/JavaAppLauncher
です。
Windowsでは、/Debug
オプションを起動ツールに渡して、トレース・メッセージを表示するウィンドウを開く必要があります。
パッケージ化の際に、<fx:jvmarg>
または<fx:property>を使用してアプリケーションにデバッグ・オプションを渡すことができます。次に例を示します。
ロードされているすべてのクラスをリストするには、<fx:deploy>
タスクに次を追加します。
<fx:jvmarg value="-verbose:class"/>
デバッグするには、次のようにします。
<fx:jvmarg value="-agentlib:jdwp=transport= dt_socket,address=4000,server=y,suspend=y"/>
ここではエージェントが、JVMの初期化後に一時停止し、デバッガがポート4000上で接続してくるのを待つように指示されています。
Mac OS X上のNetbeans 7.2でプロファイルするには、次のようにします。
<fx:jvmarg value="-agentpath:/Applications/NetBeans/NetBeans 7.2.app/Contents/Resources/NetBeans/profiler/lib/deployed/jdk16/ mac/libprofilerinterface.jnilib=/Applications/NetBeans/NetBeans 7.2.app/Contents/Resources/NetBeans/profiler/lib,5140"/>
これにより、プロファイラがアタッチされるまで、アプリケーションのロード後にアプリケーションは停止します。渡す正確な値については、プロファイラのドキュメントを参照してください。
スタンドアロン・アプリケーションのトラブルシューティングのヒントを確認します。
OS X: 他のユーザーがアプリケーションを実行できない場合、それが署名されていることを確認します。7.3.5.1項「OS X」を参照してください。
署名を検証するには、次を使用します。
codesign -v -d --verbose=4 MyApp.app
アプリケーションを再構築しても実行時に変更内容が表示されない場合、アプリケーションを終了し、次の手順を使用してJavaキャッシュをクリアします。
コマンド行からjavaws -viewer
を実行するか、Javaコントロール・パネルを手動で開きます(Windowsの「コントロール パネル」で「Java」を選択するなど)。
Javaコントロール・パネルの「インターネット一時ファイル」セクションで、「設定」、「ファイルの削除」の順にクリックします。
「キャッシュされたアプリケーションおよびアプレット」を選択し、「OK」をクリックします。
アプリケーションがエラーで失敗した場合、プロセス・リストをチェックして、どのjava
プロセスが実際に実行に使用されていたかを確認します。それが適切な場所から提供されたものであることを確認します。
Java Web Startの一般的な問題をトラブルシューティングする方法に関するヒントは、Java SEトラブルシューティング・ガイドを参照してください。
http://java.com
で、ご使用のJavaのバージョンを検証します。
JavaScriptエラー・コンソールでエラーをチェックします。
別のブラウザを試します。問題がシステムに共通のものであるか、ブラウザに固有のものであるかを確認します。
すべてのブラウザがサポートされているわけではないことに注意してください。たとえば、OS X上のChromeはサポートされていません。
使用しているブラウザのアーキテクチャを調べます。64ビット・プラットフォームを使用している場合でも、ほとんどのブラウザは32ビットです。
問題を解決するには、32ビットのJavaおよびJavaFXランタイムをインストール/アップグレードします。
ブラウザのインストール済のプラグインのリストを確認します。
リストには、Java Pluginが1つのみ存在する必要があります。JavaFX 2.2およびJava 7 update 6の場合、正しいプラグインはバージョン10.6.*です。
Windowsでは、配備ツールキット・プラグインが1つのみ存在する必要があり、それはJava Pluginのバージョン以上のバージョンである必要があります。
file://
プロトコルが使用されている場合のOS X上のSafari 6:
デフォルトのSafari 6ポリシーに従って、file://
は、コードを実行するローカル・リソースを開くために許可されていません。これは、JavaおよびJavaFXアプリケーションはロードされず、空回りして動けなくなっているように見えることを意味します。
ローカルWebサーバーを実行するか、ローカル・ファイルの制限を無効にします。これを行うには、「開発」メニューを有効にし、「ローカル・ファイルの制限を無効にする」メニュー・アイテムをチェックします。
Java Plug-inの一般的な問題をトラブルシューティングする方法に関するヒントは、Java SEトラブルシューティング・ガイドを参照してください。
デフォルトでは、JavaFXアプリケーションのプロキシ設定は、アプリケーションがWebページに埋め込まれている場合は現在のブラウザから取得されるか、またはシステムのプロキシ設定が使用されます。System.setProxy
で指定されるSOCKSプロキシ設定は、無視されることがあります。
アプリケーションの自動プロキシ構成を無効にする必要がある場合、次の例に示すように、fx:jar
にJavaFX-Feature-Proxy
マニフェスト・エントリを、値としてNone
とともに指定します。
<manifest> <attribute name="JavaFX-Feature-Proxy" value="None"/> </manifest>
JavaFX-Feature-Proxy
マニフェストを入力すると、アプリケーション・コードが実行される前にネットワーク・スタックが初期化されず、そのコードでSOCKSプロパティを設定できます。