OpenJDK 11とOpenJFX 11に移行しています。ソースから両方を正常にビルドしました。OpenJFXwikiに従って--with-import-modules = [path_to_modular_sdk] argを使用してJDKをビルドしました。 Apache Netbeans 9で単純な「Hello World」テストプロジェクトを構築するまで、すべてがうまくいきます。この時点で、「アクティブなJDKにJavaFXデプロイメントライブラリが見つかりません」というエラーが表示されます。これに関する情報を検索しようとしましたが、関連するものを見つけることができませんでした。誰かがこれを引き起こしているものに光を当てることができれば、私はそれを感謝します。助けてくれてありがとう。パトリック。
@mipaが指摘しているように、既存のプロジェクトを移行するためにJava 11もJavaFX 11もビルドする必要はありません。
Apache NetBeans 9.0に関しては、JavaFXプロジェクトの現在のantビルドファイルはまだJavaFX 11をサポートしていません。 JavaFX jarを常に探しており、見つからない場合は停止します。これは、JavaFXがJDKの一部ではなく、jarを手動で追加しなければならなかった昔(Java 8)以前)のレガシーです。
たとえば、新しいJavaFXプロジェクトを作成しようとすると、次のエラーが表示されます。
しかし、これは、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のローカルダウンロード:/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
プロジェクトは正常に実行されるはずです。
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プラグインを含めると同じことができます。
あなたはOpenJDK11/OpenJFX11に移行していると言いますが、なぜJDKとJFXの両方を自分で構築することからこの努力を始めるのですか?ここからEAビルドをダウンロードする方がはるかに簡単です http://jdk.Java.net/11/ およびここ http://jdk.Java.net/openjfx/ また、JDK11以降、JavaFXはJDKの一部ではなくなったため、JDKとは別にビルドできます。ビルド手順が最新かどうかはわかりません。
これは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フォルダーなどを要求しません以前のバージョンでした。