web-dev-qa-db-ja.com

JFX 11でJavaFX .jarファイルを開く方法

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。

8
DrMorteza

単純な(非モジュラー)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_FXFile -> Settings -> Appearance & Behavior -> Path Variablesに設定され、JavaFXを指します [〜#〜] sdk [〜#〜] lib。

Semifat Jar

プロジェクトのクラスとサードパーティの依存関係のみを含み、JavaFXの依存関係を含まないJarを作成できます。

File -> Project Structure -> Artifacts -> Add -> JAR -> From modules with dependenciesに移動し、メインクラスを追加して、受け入れます。

次に、リストからJavaFX jarを削除し、受け入れます。

SemiJar

プロジェクトをビルドすると、非常に小さな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)を追加します。

Fat Jar

ここでプロジェクトをビルドし(現在のjarは約33 MBで、不要なネイティブライブラリが含まれています)、実行します:

Java -jar out\artifacts\HelloFX_jar\HelloFX.jar

このjarはWindowsプラットフォームにのみ配布できます。

上記のリンクされた回答で説明されているように、JavaFX SDKをダウンロードする場合、他のプラットフォーム用に同様のjarを作成できます。

とにかく、jlinkinstead の使用を検討する必要があります。

このエラーについて:

原因: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"
9
José Pereda

JavaFXとIntelliJ Non-modular with Gradlehttps://openjfx.io/ openjfx-docs /

Gradle jarコマンドを使用して生成したjarは実行されず、メインクラスが見つからないというエラーがスローされます。 jarファイルを開いたとき、メインクラスを見つけることができました。だから、私はエラーがJar Packagingに関係していることに気付きました。

enter image description here

以下に示すように、IntelliJのJava SDkにJavaFX SDKを追加することで問題を修正しました。

enter image description here

この後、通常のGradleビルドJarコマンドを使用してJarファイルを生成し(下図を参照)、通常どおり実行します。

enter image description here

2
Sai Haridass