Используйте SceneBuilder с JavaFX 11 в IDEA - PullRequest
0 голосов
/ 28 ноября 2018

Я использую IDEA (с OpenJDK 11) и пытаюсь использовать SceneBuilder для отображения моих файлов FXML.Это работает, за исключением случаев, когда я использую унаследованные компоненты JavaFX, например:

public class MyLabel extends Label {
    public MyLabel(){
        super();
        setText("42");
    }
}

Я всегда получаю сообщение об ошибке:

java.lang.UnsupportedClassVersionError: sample/MyLabel has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0

Поэтому я посмотрел в папку установки IDEA (C: \Пользователи \ me \ AppData \ Local \ JetBrains \ Toolbox \ apps \ IDEA-C \ ch-0 \ xxx.xxxx.xxx \ plugins \ javaFX \ lib), и я увидел, что IDEA использует версию для Java 8 SceneBuilder("SceneBuilderKit-8.2.0.jar").

Мне интересно, как я могу использовать Java 11 версии в IDEA.Я уже пытался заполнить путь SceneBuilder в параметрах, но он не работал.

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

В дополнение к ответу Хосе Переда,

в проекте Maven, вам нужно установить build> plugins> maven-compiler-plugin> configuration> release в 8, вместо 11

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

Если встроенная версия 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 и обработан.

Ноесли вы попробуете свой пользовательский элемент управления, после построения проекта вы получите упомянутое вами исключение:

Scene Builder Exception

, так как вы компилируете с Java 11, исейчас уровень 55.

Есть ли способ заставить его работать?Как упоминалось ранее, все, что вам нужно сделать, это загрузить свой элемент управления в путь к классу, но с уровнем 52.

Итак, все, что вам нужно сделать, это установить целевой уровень вашего проекта на 1.8, в Структуре проекта ->Проект -> Уровень языка проекта

Level 1.8

Теперь соберите заново свой проект, и вы сможете увидеть пользовательский элемент управления с помощью встроенного Scene Builder:

Scene Builder with custom control

Поскольку ваш проект теперь совместим с Java 8, вы можете проверить, что сможете запускать:

/path-to-java-8/java -jar out/production/Custom_jar/Custom.jar

В любом случае, если вам не нужен этот уровень, вы, конечно, можете оставить Java 11 и использовать автономный Scene Builder 11 .

...