Как я могу запустить приложение JavaFX с Java 11?

Допустим, я установил Oracle JDK 11 (просто для упрощения). Затем я скачал JavaFX 11 от Gluon и распаковал его поверх JDK. На самом деле не имеет значения, куда я распаковываю JavaFX (потому что моя следующая цель - сделать мой собственный установщик JRE на основе OpenJRE). Затем я пытаюсь запустить приложение:

c:\Program Files\MyApp>"c:\Program Files\Java\jre-11\bin\java" 
                              --module-path="c:\Program Files\Java\jre-11\lib" 
                              --add-modules=javafx.controls 
                              --add-modules=javafx.base -jar ./MyApp.jar

И я получаю это:

Произошла ошибка во время инициализации загрузочного слоя java.lang.LayerInstantiationException: пакет jdk.internal.jrtfs как в модуле java.base, так и в модуле jrt.fs

Если я пытаюсь удалить "jrs.fs", то мое приложение рушится, потому что отсутствуют некоторые важные системные классы, связанные с загрузчиком классов. Как правильно запускать приложения JavaFX с Java 11? И нужно ли мне перераспределять JavaFX каждый раз с каждым приложением сейчас (потому что теперь его местоположение должно быть указано в командной строке, которая запускает приложение).

1 ответ

Я обнаружил, что при преобразовании из Java 8 в Java 11 вы можете просто добавить OpenJfx в качестве зависимостей в Maven (при условии, что вы используете Maven). например

<dependency>
  <groupId>org.openjfx</groupId>
  <artifactId>javafx-controls</artifactId>
  <version>11.0.1-ea+1</version>
</dependency> etc

тогда вы можете запустить

java  -cp .;.\lib --module-path .\lib;. --add-modules javafx.controls,javafx.graphics,javafx.fxml,javafx.web,javafx.swing -jar MyApp.jar

где Java 11 находится в пути, а все ваши зависимости Maven (модульные или иные) находятся в lib подкаталог. Зависимости модуля должны быть добавлены к add-modules список.

Впоследствии я обнаружил, что у вас меньше проблем, если модули размещаются в другом каталоге, например, в модулях javafx (плюс что-либо в add-modules)

java  -cp .;.\lib --module-path .\modules;. --add-modules javafx.controls,javafx.graphics,javafx.fxml,javafx.web,javafx.swing -jar MyApp.jar
Другие вопросы по тегам