web-dev-qa-db-ja.com

JavaFXデプロイメントライブラリがアクティブなJDKに見つかりません

OpenJDK 11とOpenJFX 11に移行しています。ソースから両方を正常にビルドしました。OpenJFXwikiに従って--with-import-modules = [path_to_modular_sdk] argを使用してJDKをビルドしました。 Apache Netbeans 9で単純な「Hello World」テストプロジェクトを構築するまで、すべてがうまくいきます。この時点で、「アクティブなJDKにJavaFXデプロイメントライブラリが見つかりません」というエラーが表示されます。これに関する情報を検索しようとしましたが、関連するものを見つけることができませんでした。誰かがこれを引き起こしているものに光を当てることができれば、私はそれを感謝します。助けてくれてありがとう。パトリック。

5
PatrickJ

@mipaが指摘しているように、既存のプロジェクトを移行するためにJava 11もJavaFX 11もビルドする必要はありません。

Apache NetBeans 9.0に関しては、JavaFXプロジェクトの現在のantビルドファイルはまだJavaFX 11をサポートしていません。 JavaFX jarを常に探しており、見つからない場合は停止します。これは、JavaFXがJDKの一部ではなく、jarを手動で追加しなければならなかった昔(Java 8)以前)のレガシーです。

たとえば、新しいJavaFXプロジェクトを作成しようとすると、次のエラーが表示されます。

netbeans

しかし、これは、NetBeans 9.0の有無にかかわらずJavaFX 11を実行できないという意味ではありません。

端末で実行中

端末からJava/JavaFX 11プロジェクトを実行できます。これに従うことができます 入門 詳細なステップバイステップのガイド。

簡単に言うと、必要なものは次のとおりです。

export PATH_TO_FX=/path/to/javafx-sdk-11/lib
javac --module-path $PATH_TO_FX --add-modules=javafx.controls HelloFX.Java
java --module-path $PATH_TO_FX --add-modules=javafx.controls HelloFX

ここで、HelloFX.Javaは次のとおりです。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class HelloFX extends Application {

    @Override
    public void start(Stage stage) {
        String version = System.getProperty("Java.version");
        Label l = new Label ("Hello, JavaFX 11, running on " + version);
        Scene scene = new Scene(new StackPane(l), 300, 200);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch();
    }

}

モジュラープロジェクト

NetBeans 9.0でモジュラープロジェクトを作成し、モジュールを追加します(簡単にするために、javafx11という名前を付けましたが、これは推奨されない名前です)。

コードを追加する前に、JavaFXライブラリをモジュールパスに追加しましょう。

JavaFX library

このライブラリは、JavaFXのローカルダウンロード:/Users/<user>/Downloads/javafx-sdk-11/lib/の下にあるフォルダーです。もちろん、自分で構築した場合は、代わりにその場所を指すことができます。

これでモジュールを定義できます:

module javafx11 {
    requires javafx.controls;

    exports javafx11;
}

上記のHelloFXクラスをjavafx11パッケージに追加します。

これで、プロジェクトは完全に正常に実行されます。

まだantを使用している場合でも、この場合、ビルドファイルはモジュールパスの変更に合わせて更新され、JavaFX固有のものはないため、プロジェクトは問題なく実行されます。

Javaプロジェクト

モジュラープロジェクトが機能する場合、regularJavaプロジェクトはNetBeans 9.0でも同様に機能します。

Javaプロジェクトを作成します(JavaFXプロジェクトではありません)、JavaFXライブラリをモジュールに追加します上記の-pathで、コンパイルと実行の両方にこれらのVMオプションを追加する必要があります。

 --module-path=/path/to/javafx-sdk-11/lib --add-modules=javafx.controls

プロジェクトは正常に実行されるはずです。

JavaFX 11

Maven

別のアプローチは、antの代わりにMavenまたはGradleを使用することです。

Maven-> JavaFXプロジェクトを作成し、pom.xmlファイルを変更してJavaFX依存関係を追加するだけです。

<dependencies>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-controls</artifactId>
        <version>11-ea+23</version>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-fxml</artifactId>
        <version>11-ea+23</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <release>11</release>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.ow2.asm</groupId>
                    <artifactId>asm</artifactId>
                    <version>6.1.1</version>
                    <!--  Use newer version of ASM  -->
                </dependency>
            </dependencies>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>Java</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <mainClass>javafx11.HelloFX</mainClass>
                </configuration>
        </plugin>
    </plugins>
</build>

NetBeansからクリーンアップ、ビルド、実行します。正常に動作するはずです。

Gradleの場合、NetBeansのGradleプラグインを含めると同じことができます。

8
José Pereda

あなたはOpenJDK11/OpenJFX11に移行していると言いますが、なぜJDKとJFXの両方を自分で構築することからこの努力を始めるのですか?ここからEAビルドをダウンロードする方がはるかに簡単です http://jdk.Java.net/11/ およびここ http://jdk.Java.net/openjfx/ また、JDK11以降、JavaFXはJDKの一部ではなくなったため、JDKとは別にビルドできます。ビルド手順が最新かどうかはわかりません。

0
mipa

これはNetbeans 9の問題です。Netbeansで長年にわたってOracle JDKであったSun JDKを使用していました。 Netbeans 7.2では、JFX jarファイルを手動で追加するオプションがありました。その後、JFXがOracle JDK8に組み込まれましたが、このオプションは現在利用できません。数週間前、私は来年にはOracle JDKはもう無料ではないことを知らされたので、Open JDK10への移行を始めましたが、あなたと同じ問題を抱えています。これは、Open JFXがOpen JDKに組み込まれていないためです。すでにGAであるOracle JDK11を使用する場合、JFXアプリの構築に問題はありません。問題は、NetBeansでJava Platform for Open JDKとして設定すると、JFXがJDK自体の中にあることを期待しますが、NetbeansはJFXフォルダーなどを要求しません以前のバージョンでした。

0
bichoFlyer