Java 11が最新バージョンの一部としてJavaFXを除外したため、次のエラーが表示されます。
Error: JavaFX runtime components are missing, and are required to run this application
では、Java 11でEclipseにJavaFXを追加するにはどうすればよいですか?ありがとう。
スタートガイド に従い、これらはEclipseからJavaFX 11を実行するために必要な手順です。
1 here からEclipse 2018-09をインストールします。
2 here からJDK 11をインストールします。
3 Java 11をEclipseにインストール済みのJREとして追加します:Eclipse-> Window-> Preferences-> Java-> Installed JREs-> Add。
4 here からJavaFX 11 eaをダウンロードします。
5ユーザーライブラリを作成します。Eclipse-> Window-> Preferences-> Java-> Build Path-> User Libraries-> New。 JavaFX11という名前を付け、JavaFX 11-eaのlibフォルダーの下にjarを含めます。
6 Javaプロジェクトを作成します。モジュールパスクラスを追加する必要はありません。 Java 11を選択し、JavaFX11ライブラリをプロジェクトのモジュールパスに追加してください。
7パッケージjavafx11
およびメインアプリケーションクラスHelloFX
を追加します。
package javafx11;
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();
}
}
ユーザーライブラリが含まれているため、エディターがJavaFXクラスについて文句を言うべきではないことに注意してください。
8ランタイム引数を追加します。プロジェクトの実行構成を編集し、これらのVM引数を追加します。
--module-path C:\Users\<user>\Downloads\javafx-sdk-11\lib --add-modules=javafx.controls
9最後に、プロジェクトを実行します。正常に動作するはずです。
Javafx 11アプリの起動に関する調査結果を共有したいと思います。私は元々モジュールなしで開発された既存のレガシーjavafxアプリについて話している(例:Java 8)。
IMOの最も興味深い方法は、以下の方法#2bであり、最小限の変更が必要です。 -module-path
引数は必要ありません。私はmavenを使用していると言いますので、cf。以前の回答では、最初のステップはpom.xml
にjavafxへの依存関係を追加することです。例えば。:
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11.0.2</version>
</dependency>
起動するために、いくつかのオプションを見つけました。
pom.xml
で次のようなセクションを構成します。
<build>
<plugins>
...
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<goals>
<goal>Java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>org.openjfx.hellofx.MainApp</mainClass>
</configuration>
</plugin>
</plugins>
</build>
この後、コンソールウィンドウからmvn exec:Java
を実行すると、アプリケーションが起動します。 Mavenは、classpathからmodule pathへのすべてのエントリの追加を処理します。 IDEでターミナルウィンドウを直接開くEclipseのCTRL + ALT + T
ショートカットを思い出します。
プロジェクトを右クリック>実行> Mavenビルド...次にGoalsテキストボックスにexec:Java
と入力します。 Advantage以前の方法に比べて:Eclipseにもう少し統合されています。そして簡単なデバッグ。デバッグモードで起動設定を再起動するだけで、それで終わりです。 Eclipseの起動設定は、プロジェクトディレクトリ(レポ)に.launch
ファイルとして直接保存できるため、同僚が共有/再利用できることを思い出してください。 Edit Configurationウィンドウで、最後のタブCommonを使用します。
-module-path
を指定しますメインクラスを右クリックし、[実行]> Java Applicationを右クリックします。初めてクリックすると、新しい起動構成が作成されます。おそらく機能しないので、編集する必要があります(例:ツールバーの[実行]ボタン([再生]アイコン付き)> [構成の実行]>クラスに対応するものを選択するか、クリック後にCTRL + click
onPlay)。
次に、これをArguments> VM argumentsに追加します。
--module-path ${project_classpath:REPLACE_ME_WITH_YOUR_PROJECT_NAME} --add-modules javafx.controls,javafx.fxml
そのため、ここでのトリックは${project_classpath}
変数を使用することでした。それ以外の場合は、javafx jarへのパスを正確に記述する必要があるはずなので、それは.m2
リポジトリのどこかにあります。これを行うと、同僚が起動設定を簡単に再利用できなくなります。
-module-path
を指定せずにEclipseを使用して起動しますこれはla piece de resistenceであり、Java 11とモジュール「楽しい」の約5時間後に誤って見つけました。アプリケーションは、-module-path
に触れることなく、そのまま使用できます。もちろん、javafxライブラリはクラスパスに含まれている必要があります(ただし、これはmvnによって処理されます)。 trickは(cf. this )です。メインアプリはApplication
を拡張すべきではありません(例:MyApplication
未満)。これに該当する場合は、次のようなmain()
関数を使用して新しいクラスを作成します。
Application.launch(MyApplication.class);
私の場合(つまり、Windowsで、システムにデフォルトのJDK 8がある場合)、javafxの起動に関する既知の問題があります。解決策は、次のVM arg:-Djava.library.path=C:
を追加することです。したがって、実際には上記の4つの方法すべてに対して、これを追加する必要がありました。
FXMLLoader
に関する問題がありました...クラスが見つかりませんでした。
上記の引数を変更して、javafx.controls
だけでなくallモジュールをロードすることでこれを解決しました。
--module-path <path to the javafx sdk> --add-modules=ALL-MODULE-PATH
@JoséPeredaは完全に正しいです。すべてが正常に機能します。 Eclipseリリース2018-12でテストしました。したがって、IDEをダウンロードした後( https://www.Eclipse.org/downloads/packages/release/2018-12/r/Eclipse-ide-Java-developers )およびe(fx)clipseプラグインをインストールすると、ワークスペースに「JavaFxプロジェクト」アイテムを作成できるはずです。
次のステップは、「クラスパス」モジュールから「JavaFX SDK」を削除し(プロパティ-> Javaビルドパス->ライブラリ)、コンパイルエラーを削除するためにMaven依存関係を追加することです。
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11.0.1</version>
</dependency>
最後のステップは、アプリケーションを起動するために、JavaFXクラスの「実行構成」にVM引数を追加することです(実行構成->引数タブ-> VM引数):
--module-path C:\path to the OpenJFX\javafx-sdk-11.0.1\lib --add-modules=javafx.controls
実行後に機能するはずです。もちろん、その前にJavaFX SDKをダウンロードして( https://gluonhq.com/products/javafx/ )、解凍し、前述のVM引数。