Как добавить среду выполнения JavaFX в Eclipse в Java 11?

Я получаю следующую ошибку, поскольку Java 11 исключил JavaFX как часть последней версии.

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

Итак, как я могу добавить JavaFX в Eclipse в Java 11? Благодарю.

Ответ 1

Следуя руководству по началу работы, это необходимые шаги для запуска JavaFX 11 из Eclipse.

1 Установите Eclipse 2018-09 отсюда.

2 Установите JDK 11 отсюда.

3 Добавьте Java 11 в качестве установленной JRE в Eclipse: Eclipse → Window → Preferences → Java → Installed JREs → Add.

4 Загрузите JavaFX 11 ea отсюда.

5 Создайте пользовательскую библиотеку: Eclipse → Window → Preferences → Java → Build Path → User Libraries → New. Назовите его JavaFX11 и включите файлы jar в папку lib из JavaFX 11-ea.

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 Наконец, запустите проект. Это должно работать нормально.

Ответ 2

Я хотел бы поделиться своими выводами о запуске приложения javafx 11. Я говорю о существующем унаследованном приложении javafx, изначально разработанном без модулей (например, с Java 8).

Наиболее интересным способом IMO является метод # 2b, приведенный ниже, который требует минимума изменений, , т.е. ему не нужен аргумент -module-path. Я упоминаю, что я использую Maven, поэтому ср. В предыдущих ответах первым шагом является добавление зависимости в вашем 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 в путь к модулю. Я напоминаю ярлык CTRL + ALT + T в Eclipse, который открывает окно терминала прямо в IDE.

1b) Запуск с использованием Maven, но в качестве конфигурации запуска Eclipse

Щелкните правой кнопкой мыши по проекту> Run As> Maven Build.... Затем введите exec:java в текстовое поле Цели. Преимущество по сравнению с предыдущим методом: немного более интегрированный в Eclipse. И легкая отладка. Вам нужно только перезапустить конфигурацию запуска в режиме отладки и все. Позвольте напомнить, что конфиги запуска Eclipse могут быть сохранены в виде файлов .launch непосредственно в каталоге проекта (репо), что позволяет коллегам использовать их/использовать повторно. Используйте последнюю вкладку, Общая, в окне Изменить конфигурацию.

2a) Запустите с использованием Eclipse и укажите -module-path с помощью переменной

Щелкните правой кнопкой мыши по основному классу> Запуск от имени> Java-приложение. При первом щелчке создается новая конфигурация запуска; возможно, это не сработает, поэтому вам нужно отредактировать его (например, ** кнопку "Выполнить" (со значком "Play") на панели инструментов> "Выполнить конфигурации"> выберите тот, который соответствует вашему классу. Или нажмите CTRL + click на нем после нажатия на кнопку "Play")).

Затем добавьте это в Аргументы> ВМ аргументы:

--module-path ${project_classpath:REPLACE_ME_WITH_YOUR_PROJECT_NAME} --add-modules javafx.controls,javafx.fxml

Итак, хитрость в том, чтобы использовать переменную ${project_classpath}. Потому что в противном случае вам нужно было бы написать точно путь к банке javafx, который находится где-то в вашем репозитории .m2. Это может затруднить многократное использование конфигурации запуска.

2b) Запуск с использованием Eclipse БЕЗ указания -module-path

Это часть существования, которую я нашел по ошибке после 5 часов Java 11 & модули "веселье". Ваше приложение может работать из коробки, не касаясь -module-path. Разумеется, библиотеки javafx все еще должны быть в вашем classpath (но это обрабатывается mvn). Трюк заключается в (см. это), что ваше основное приложение НЕ ДОЛЖНО расширять Application (например, MyApplication ниже). Если это ваш случай, то создайте новый класс с функцией main(), которая выполняет, например:

Application.launch(MyApplication.class);

ПРИМЕЧАНИЕ

В моем случае (то есть в Windows с JDK 8 по умолчанию в системе) существует известная проблема с запуском javafx. Решение состоит в том, чтобы добавить следующий VM arg: -Djava.library.path=C:. Так что на самом деле для всех 4 методов, описанных выше, мне нужно было добавить это.

Ответ 3

У меня проблемы с FXMLLoader... Не удалось найти класс. Решено изменять аргументы, показанные выше, чтобы загружать ВСЕ модули, а не только javafx.controls:

--module-path... путь к javafx sdk... --add-modules = ALL-MODULE-PATH

С наилучшими пожеланиями!

Ответ 4

@Хосе Переда совершенно прав, все работает как надо. Я проверил это с выпуском Eclipse 2018-12. Итак, после загрузки среды IDE (https://www.eclipse.org/downloads/packages/release/2018-12/r/eclipse-ide-java-developers) и установки плагина e (fx) clipse вам необходимо быть в состоянии создать элемент "JavaFx Project" в вашей рабочей области.

Следующим шагом является удаление "JavaFX SDK" из модуля "Classpath" (Свойства → Путь сборки Java → Библиотеки) и добавление зависимости Maven для удаления ошибок компиляции:

<dependency>
   <groupId>org.openjfx</groupId>
   <artifactId>javafx-controls</artifactId>
   <version>11.0.1</version>
</dependency>

JavaFX SDK for deletion

Последний шаг - добавить аргумент VM в "Run Configuration" вашего класса JavaFX для запуска приложения (Run Configurations → вкладка Arguments → VM arguments):

--module-path C:\path to the OpenJFX\javafx-sdk-11.0.1\lib --add-modules=javafx.controls

и он должен работать после того, как вы запустите его. Конечно, вы должны загрузить JavaFX SDK до этого (https://gluonhq.com/products/javafx/), разархивировать его и использовать путь к папке "lib" в вышеупомянутом аргументе VM.