Как добавить среду выполнения 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>
Последний шаг - добавить аргумент 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.
Ответ 5
Azul предоставляет готовый OpenJDK с JavaFX: https://www.azul.com/downloads/zulu/zulufx/