javafx.util.Pair
является частью javafx.base
модуля , и, как вы упомянули, вам необходимо загрузить JavaFX SDK на свой компьютер, поскольку он больше не является частью Java JDK.
Вы можете следовать OpenJFX документам о том, как начать работу.
Как только вы скачали SDK, если вы хотите запустить JavaFX 11, вы увидите, что вам нужно сделать что-то, как документировано :
export PATH_TO_FX=path/to/javafx-sdk-11.0.2/lib
javac --module-path $PATH_TO_FX --add-modules=javafx.controls HelloFX.java
java --module-path $PATH_TO_FX --add-modules=javafx.controls HelloFX
Это означает, что вы запускаете Java 11 и включаете модули из независимого расположения JavaFX SDK.Обратите внимание, что javafx.controls
имеет в качестве транзитивных зависимостей модули javafx.base
и javafx.graphics
.
Однако вы не прочтете в этих документах, что вам нужно скопировать файлы JavaFX в JDK.Это не сработает.
Основная причина, по которой это не сработает: Java 11 и JavaFX 11 являются модульными, и даже если вы видите jar-файлы JavaFX под path/to/javafx-sdk-11.0.2/lib
, JDK использует большой файл:/path/to/jdk-11.0.2.jdk/Contents/Home/lib/modules
для запуска команды java
.Этот файл был создан при сборке JDK, поэтому добавление к нему любого jar-файла не даст никакого эффекта.
Альтернатива
Однако вы найдете в документации правильный способ «скопировать» JavaFX SDK в JDK: путем создания нового пользовательского образа.См. ссылку , раздел Custom JDK+JavaFX image
.
. Вы можете использовать jlink
, чтобы создать образ среды выполнения, включающий некоторые или все модули JavaFX, без привязки к данномуproject.
Таким образом, вы можете создать комбинированный образ Java11 + JavaFX11 и использовать его в качестве нового JDK.Это позволит вам избавиться от аргументов --module-path
и --add-modules
(по крайней мере, с точки зрения JavaFX).
На самом деле, некоторые дистрибутивы, такие как этот , уже делают это.
Возможны следующие варианты: вы используете обычный JDK и JavaFX SDK (с --module-path
и --add-modules
) или создаете / используете пользовательский JDK, включающий JavaFX.