Как я могу запустить приложение 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