web-dev-qa-db-ja.com

Java 11でJavaFXランタイムをEclipseに追加する方法は?

Java 11が最新バージョンの一部としてJavaFXを除外したため、次のエラーが表示されます。

Error: JavaFX runtime components are missing, and are required to run
this application

では、Java 11でEclipseにJavaFXを追加するにはどうすればよいですか?ありがとう。

21
user3520615

スタートガイド に従い、これらは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最後に、プロジェクトを実行します。正常に動作するはずです。

21
José Pereda

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>

起動するために、いくつかのオプションを見つけました。

1a)コマンドラインからmavenを使用して起動

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ショートカットを思い出します。

1b)mavenを使用して起動しますが、Eclipse起動設定として

プロジェクトを右クリック>実行> Mavenビルド...次にGoalsテキストボックスにexec:Javaと入力します。 Advantage以前の方法に比べて:Eclipseにもう少し統合されています。そして簡単なデバッグ。デバッグモードで起動設定を再起動するだけで、それで終わりです。 Eclipseの起動設定は、プロジェクトディレクトリ(レポ)に.launchファイルとして直接保存できるため、同僚が共有/再利用できることを思い出してください。 Edit Configurationウィンドウで、最後のタブCommonを使用します。

2a)Eclipseを使用して起動し、変数を使用して-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リポジトリのどこかにあります。これを行うと、同僚が起動設定を簡単に再利用できなくなります。

2b)-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つの方法すべてに対して、これを追加する必要がありました。

6
Cristian

FXMLLoaderに関する問題がありました...クラスが見つかりませんでした。

上記の引数を変更して、javafx.controlsだけでなくallモジュールをロードすることでこれを解決しました。

--module-path <path to the javafx sdk> --add-modules=ALL-MODULE-PATH
1
carlao2005

@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 SDK for deletion

最後のステップは、アプリケーションを起動するために、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引数。

0