Как я могу запустить приложение JavaFX с Java 11? - PullRequest
0 голосов
/ 07 ноября 2018

Допустим, я установил 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 Ответ

0 голосов
/ 18 ноября 2018

Я обнаружил, что при преобразовании из 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
...