アプリケーションを手動で起動する必要が--module-path
あり--add-modules
、アプリケーションのパッケージ化中に JavaFX を含めることができなかった場合、または少なくとも JavaFX を正しく含めることができなかった場合。コードがモジュール化されていなくても、JavaFX はモジュール化されていることに注意してください。したがって、アプリケーションをパッケージ化するときは、jpackage
JavaFX をモジュールとして扱うように指示する必要があります。
まず、JavaFX JMOD ファイルを取得する必要があります。少なくとも 2 つの方法のいずれかでそれらを取得できます。
- Gluon から JMOD ファイルをダウンロードします (JavaFX SDK をダウンロードしたのと同じ場所)。
- JavaFX を含む JDK をインストールして使用します (Zulu Community、BellSoft Liberica などから)。
- このオプションを使用すると、最初から JavaFX SDK は必要ありません。
JMOD ファイルが必要なのは、ネイティブ コード (およびライセンスなどのその他のもの) を Java コードと共にパッケージ化するためです。これにより、ネイティブ コードをカスタム ランタイム イメージに適切に含めることができますjlink
(舞台裏で によって使用されます)。jpackage
また、JavaFX (および JMOD ファイルの拡張) はプラットフォーム固有であることを忘れないでください。またjpackage
、起動されたオペレーティング システム用のアプリケーションのみを作成できます。
JMOD ファイルを取得したら、アプリケーションをパッケージ化します。コードがモジュール式ではなく (-jar
質問で使用)、コードを JAR ファイルにパッケージ化したとします。次のコマンドは、使用する必要がある最低限のものですjpackage
。
jpackage --type app-image --module-path <path-to-jmods> --add-modules <needed-modules>
--input <dir-containing-your-jar-file> --main-jar <your-jar-file>
--main-class <your-main-class> --dest <your-output-location>
いくつかのメモ:
JavaFX を含む JDK をインストールして使用する場合は、必要ありません--module-path
。少なくとも JavaFX ではありません。
アプリケーションに必要なモジュールがわかりません(--add-modules
オプション用)。あなたは使っていますが、私はあなたがすべてALL-MODULE-PATH
を必要としているとは思えません。
肯定的ではありませんがMain-Class
、JAR ファイルのマニフェストに属性がある場合--main-class
は必要ないと思います。
本当に引数が必要な場合は--add-exports
、次を使用できます。
--java-options="--add-exports javafx.graphics/com.sun.javafx.sg.prism=ALL-UNNAMED"
--add-modules
コードをモジュール化すると、引数を取り除くこともできます。代わりに、モジュール (および JDK にないモジュール) を and に置き、、、およびをand--module-path
に置き換えます。--input
--main-jar
--main-class
--module-path
--module
- この場合
--input
、もはや必要ではないようです。ただし、アプリケーションに必要な他のファイル (セキュリティ ポリシー ファイルなど) がある場合は、--input
.
詳細については、JPackage ユーザー ガイドを参照してください。ガイドに記載されているアプリケーションをカスタマイズする方法は多数ありますが、この回答には記載されていません。
それでもすべてのコンピューターで「JVM の起動に失敗しました」エラーが解決しない場合は、さらにデバッグを行う必要があります。最初に必要なのは、問題の原因となっている実際のエラーを知ることです。これを行うには、少なくとも 2 つの方法が考えられます。
- アプリケーションにロギングを追加します。ファイルにログを記録します。
jpackage
アプリケーションをコンソール ベースにするように構成します。次に、コンソールからアプリケーションを起動して、出力を確認します。出力の表示に問題がある場合は、標準/エラー ストリームをファイルにリダイレクトするか、コンソールに新しいウィンドウを開かないように指示するオプションを使用できます。