IntelliJでJavaFXプロジェクトを作成しました。 IntelliJでプロジェクトを実行できます。構成のコードの下に追加しました):
--module-path ${PATH_TO_FX} --add-modules=javafx.controls,javafx.fxml
ただし、プロジェクト(Artifectsで作成)の出力.jarファイルは実行されません。これらのコマンドをテストしましたが、チャンスはありませんでした。
Java --module-path %PATH_TO_FX% --add-modules javafx.controls,javafx.fxml -jar Timer.jar
Java --module-path %PATH_TO_FX% --add-modules javafx.controls Timer.jar
コマンドラインの最後のエラーログ:
Error: Could not find or load main class Files\Java\javafx-sdk-11.0.1\lib
Caused by: Java.lang.ClassNotFoundException: Files\Java\javafx-sdk-11.0.1\lib
p.s:JDK-10でビルドするときにこのプロジェクトの.jarファイルを実行できました
[〜#〜] edit [〜#〜]:
JavaFXをダウンロードし、そのlibフォルダーをシステム環境に追加しました。プロジェクトにJavaFXを追加するために、このプロセスを実行しました。プロジェクト構造>ライブラリ>追加> Java> JavaFxPath/lib
次に、このプロセスで出力jarファイルのArtifectを作成しました。プロジェクト構造> Artifects>追加> JAR>依存関係のあるモジュールから>メインクラス:main.Main。
単純な(非モジュラー)JavaFX 11プロジェクト(Maven/Gradleビルドツールなし)があり、HelloFXサンプル here のようにIntelliJを使用している場合、これはjarを作成する方法ですコンソールから実行できるIntelliJから
プロジェクトの実行方法に関する完全なチュートリアルは here にあり、jarの作成方法の指示は here です(ただし、非モジュールプロジェクトを参照)。 IntelliJのArtifacts
はカバーしません。
これらのVMオプションを使用して、HelloFXプロジェクトがIntelliJから実行されることを確認します。
--module-path ${PATH_TO_FX} --add-modules javafx.controls,javafx.fxml
PATH_TO_FX
はFile -> Settings -> Appearance & Behavior -> Path Variables
に設定され、JavaFXを指します [〜#〜] sdk [〜#〜] lib。
Semifat Jar
プロジェクトのクラスとサードパーティの依存関係のみを含み、JavaFXの依存関係を含まないJarを作成できます。
File -> Project Structure -> Artifacts -> Add -> JAR -> From modules with dependencies
に移動し、メインクラスを追加して、受け入れます。
次に、リストからJavaFX jarを削除し、受け入れます。
プロジェクトをビルドすると、非常に小さなjar(この場合は3 KB)が作成されます。
これで、次のように実行できるはずです。
Java --module-path %PATH_TO_FX% --add-modules javafx.controls,javafx.fxml -jar out\artifacts\HelloFX_jar\HelloFX.jar
(%PATH_TO_FX%
が有効なフォルダーを指していることを確認し、スペースが含まれている場合は引用符を使用します。
このjarを配布して、他のプラットフォームで実行できます。ただし、JavaFX SDKも提供されます。
ファットジャー
JavaFX依存関係を含む完全なファットjarが必要な場合でも、アーティファクトを使用できます。
File -> Project Structure -> Artifacts -> Add -> JAR -> From modules with dependencies
に移動し、メインクラスを追加して、受け入れます。
次に、リストからJavaFX jarを保持し、受け入れます。プロジェクトをビルドします。
理論的には、次のように実行できるはずです。
Java -jar out\artifacts\HelloFX_jar\HelloFX.jar
しかし、これは機能しません。
理由1: こちら で説明したように、ランチャークラスが必要です。
したがって、ランチャークラスを作成します。
public class Launcher {
public static void main(String[] args) {
Main.main(args);
}
}
理由2:SDK jarをfat jarに追加するだけの場合、 here のように、ネイティブライブラリが欠落します。
アーティファクトを編集し、Launcherクラスをメインクラスとして選択し、ネイティブライブラリ(WindowsではDirectory Content -> path-to/JavaFX SDK/bin
)を追加します。
ここでプロジェクトをビルドし(現在のjarは約33 MBで、不要なネイティブライブラリが含まれています)、実行します:
Java -jar out\artifacts\HelloFX_jar\HelloFX.jar
このjarはWindowsプラットフォームにのみ配布できます。
上記のリンクされた回答で説明されているように、JavaFX SDKをダウンロードする場合、他のプラットフォーム用に同様のjarを作成できます。
とにかく、jlink
instead の使用を検討する必要があります。
注
このエラーについて:
原因:Java.lang.ClassNotFoundException:Files\Java\javafx-sdk-11.0.1\lib
ライブラリパスが引用符なしで設定され、パスの最初の部分C:\Program Files\...
が欠落しているようです。引用符を使用してください:
set PATH_TO_FX="C:\Program Files\Java\javafx-sdk-11.0.1\lib"
JavaFXとIntelliJ Non-modular with Gradle( https://openjfx.io/ openjfx-docs / )
Gradle jarコマンドを使用して生成したjarは実行されず、メインクラスが見つからないというエラーがスローされます。 jarファイルを開いたとき、メインクラスを見つけることができました。だから、私はエラーがJar Packagingに関係していることに気付きました。
以下に示すように、IntelliJのJava SDkにJavaFX SDKを追加することで問題を修正しました。
この後、通常のGradleビルドJarコマンドを使用してJarファイルを生成し(下図を参照)、通常どおり実行します。