пакет javafx.util не существует - PullRequest
3 голосов
/ 14 марта 2019

Я использую Java-версию 11.0.2 на Mac.Когда я скомпилировал файл Java, который импортирует javafx.util.pair, я получил error: package javafx.util does not exist.Существует не так много полезных ресурсов для решения этой проблемы.Я пробовал разные предложения онлайн, но не зря.В настоящее время я пытаюсь добавить пакет JavaFX в мой каталог Java.Но это не работает.

Вот что я сделал:

  1. Скачанная папка javafx-sdk-11.0.2.Внутри папки есть 2 каталога - юридический и lib

  2. Перемещенные элементы в legal dir в /Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home/legal

  3. Перемещение элементов вlib dir to /Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home/lib

  4. Открыть терминал, чтобы скомпилировать этот файл .java.

Вопрос_1: Я что-то пропустил выше?

Вопрос_2: Если этот подход неверен, что бы вы предложили?

1 Ответ

2 голосов
/ 14 марта 2019

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.

...