Если встроенная версия IntelliJ Scene Builder - 8.2, то вы не можете ожидать, что он может «визуализировать» любой класс в своем пути к классам, скомпилированный для версии Java, превышающей 8 (уровень 52).
ВстроенныйScene Builder - это просто еще одно запущенное Java-приложение, в основном приложение JavaFX, работающее в составе компонента Swing поверх редактора IntelliJ.
Java 8
Для работыс обычными файлами FXML, использующими встроенные элементы управления, Scene Builder использует JDK для загрузки jfxrt.jar
в путь к классам.
Если вы создаете свой собственный пользовательский элемент управления с использованием Java 8 (этот вопрос * 1013)* имеет хороший пример того, как это сделать), и вы не скомпилируете проект, когда вы попробуете Scene Builder, вы получите ClassNotFoundException
, потому что элемент управления не находится в пути к классам, иScene Builder не знает, как с этим справиться.
Но после создания проекта результирующие классы также добавляются в путь к классам, и вы можете увидеть визуализированный элемент управления.
Java 11
Когда вы создаете пользовательский элемент управления с Java 11, как вы знаете, больше нет jfxrt.jar
.
ПослеПриступая к работе docs , вам нужно добавить JavaFX 11 SDK в ваш проект и параметры виртуальной машины
--module-path ${PATH_TO_FX} --add-modules=javafx.controls,javafx.fxml
, чтобы запустить проект.
Если у вас есть обычный файл FXML с только встроенными элементами управления и вы перейдете во встроенный Scene Builder, он загрузит и отобразит его.Это почему?Поскольку он, вероятно, использует внутренний JDK 1.8, поставляемый с IntelliJ, поэтому файл FXML (содержащий чистый XML, а не файл Java!) Может быть проанализирован (Java 8) FXMLLoader
и обработан.
Ноесли вы попробуете свой пользовательский элемент управления, после построения проекта вы получите упомянутое вами исключение:
, так как вы компилируете с Java 11, исейчас уровень 55.
Есть ли способ заставить его работать?Как упоминалось ранее, все, что вам нужно сделать, это загрузить свой элемент управления в путь к классу, но с уровнем 52.
Итак, все, что вам нужно сделать, это установить целевой уровень вашего проекта на 1.8, в Структуре проекта ->Проект -> Уровень языка проекта
Теперь соберите заново свой проект, и вы сможете увидеть пользовательский элемент управления с помощью встроенного Scene Builder:
Поскольку ваш проект теперь совместим с Java 8, вы можете проверить, что сможете запускать:
/path-to-java-8/java -jar out/production/Custom_jar/Custom.jar
В любом случае, если вам не нужен этот уровень, вы, конечно, можете оставить Java 11 и использовать автономный Scene Builder 11 .