Java11 / JavaFX11 /モジュールの展開混乱(クリックした場合は動作しますが、コマンドラインから実行した場合はないRunnableをJAR)

Brasch:

私はJava11 /すべてovercomplicatedモジュールのものに新たなんです。

問題

だから私は、RunnableをJARとしてのEclipseからの私Java11 / JavaFX11プログラムを輸出しました。私はJARをクリックした場合、それは(Eclipseが実行可能なJAR内に自動的にモジュールの設定とJavaFXの自身の全てを含みます)細かい完璧に動作します。しかし、私はJREでJARをバンドルして、次のBATファイルを使用して、コマンドラインを介して、それを実行しようとします。

@ECHO OFF %~dp0\jre\bin\java -jar javaprogram.jar pause

私が取得します:

Error: JavaFX runtime components are missing, and are required to run this application Press any key to continue . . .

どのように私は私がそれをクリックしたときにそれがないようにそれだけでJARファイルを実行するために得ることができますか?

私はそれを修正しようとした方法

私は使用している場合は奇妙な部分は、次のとおりです。

java -jar javaprogram.jar

これは単にアクセスし、インストール済みそれが再び動作する、JREを。それは私が直接、特定のパスにJREにそれを指していたときに、破るために表示されていることだけです。

また、私はちょうどJREの横のJavaFXをバンドルしたいが、コールへの道があるように思えません--module-path(私の全く無関係な原料の束を、このネットをグーグル)の相対パスを持ちます。人々がzipアーカイブをダウンロードし、それを抽出している場合は仕事に行くされていない正確なパスを、要求しているようです。EclipseがすでにJARでのJavaFXをパッケージ化されたので、これはかかわらず、冗長になります。私は、コマンドラインからそれを呼んでいるので、それだけで混乱している理由私は知りません。

プロジェクトのコード

あなたがここにそれのためのコードをチェックアウトすることができますので、私はで動作するように、これを取得しようとしているプロジェクトは、オープンソースであることを起こります。

https://github.com/SkyAphid/JDialogue

メインクラスはJDialogueCoreです。

閉鎖

私はそれがあまりにもbloatyだと思うので、インストーラを使用する必要はありません。私はいつもあなたが抽出して実行することができますアーカイブにそれらを入れて持っているように、私のソフトウェアを展開できるようにしたいと思います。

私が原因話題の広さに全く関係のない結果を得続けるので、それは単に、同様の問題をGoogleに困難です。この問題に関連する任意の方向/ドキュメントをいただければ幸いです。

お時間をいただき、ありがとうございます!

VGR:

Javaの8、9、および10は、JavaFXの許可しながら、アプリケーションのあなたの配置Javaの11のようもはやケースではありませんプログラムの起動時のメインクラス、サブクラスとして機能するためにpublic static void main別のクラスにメソッドを、そのクラスを作り、メインクラスが解決します問題。(出典:https://github.com/javafxports/openjdk-jfx/issues/236

あなたのコマンドライン呼び出しは、JavaFXのjarファイルの場所、およびJavaFXのネイティブライブラリの場所の両方を指定する必要があります。通常、これらは、JavaFXのSDKで同じ場所ですが、彼らは別の方法で指定する必要があります。ネイティブライブラリの場所は、システムプロパティで指定する必要がありながら、jarファイルは、クラスパスまたはモジュールのパスに移動します。

cd /d %~dp0
jre\bin\java -cp javaprogram.jar;javafx-sdk-11\lib -Djava.library.path=javafx-sdk-11\lib com.example.MyNonApplicationClass

あなたが定義した場合module-info.java、あなたのプログラムの中で、あなたの.jarは、モジュール式の.jarあり、そしてあなたは、モジュールの追加のセキュリティの恩恵を受けることができます。

cd /d %~dp0
jre\bin\java --module-path javaprogram.jar;javafx-sdk-11\lib -Djava.library.path=javafx-sdk-11\lib -m com.example.myapp/com.example.MyNonApplicationClass

お使いのモジュラーの.jarファイルは、メインクラスが定義されている場合は、クラス名を省略することができます。

cd /d %~dp0
jre\bin\java --module-path javaprogram.jar;javafx-sdk-11\lib -Djava.library.path=javafx-sdk-11\lib -m com.example.myapp

相対パスはとうまく動作することに注意してください--module-path相対パスをベースとして、現在のディレクトリを使用します。カレントディレクトリを置くだけで変更されていない%~dp0のJavaの呼び出しの前に。カレントディレクトリは、コマンドラインまたはスクリプトの財産を積極的に実行している、とだけのようなコマンドで変更することができていますcdpushd

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=219741&siteId=1