Я использую Intellij с javafx 12, как отдельную библиотеку.Мне удалось заставить это работать.Я сделал игру, и графика отлично работает.Теперь я хотел создать меню с некоторыми кнопками.Он выдает исключение, когда я пытаюсь добавить кнопку в корень сцены, со следующим исключением:
Exception in thread "JavaFX Application Thread" java.lang.IllegalAccessError: superclass access check failed: class com.sun.javafx.scene.control.ControlHelper (in unnamed module @0x77b376ef) cannot access class com.sun.javafx.scene.layout.RegionHelper (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.scene.layout to unnamed module @0x77b376ef
Я нашел его в Google и нашел некоторые решения по переполнению стека, которые не работают для меня,Мои аргументы командной строки следующие (основанные на этих решениях):
--module-path "C:\Program Files\Java\javafx-sdk-11.0.2\lib" \
--add-modules=javafx.swing,javafx.graphics,javafx.fxml,javafx.media,javafx.web,javafx.scene,javafx.controls \
-p "C:\Program Files\Java\javafx-sdk-11.0.2\lib\javafx.base.jar" : \
"C:\Program Files\Java\javafx-sdk-11.0.2\lib\javafx.graphics.jar" \
--add-exports javafx.graphics=ALL-UNNAMED \
--add-exports javafx.controls/com.sun.javafx.charts=ALL-UNNAMED \
--add-exports javafx.graphics/com.sun.javafx.iio=ALL-UNNAMED \
--add-exports javafx.graphics/com.sun.javafx.iio.common=ALL-UNNAMED \
--add-exports javafx.graphics/com.sun.javafx.css=ALL-UNNAMED \
--add-exports javafx.base/com.sun.javafx.runtime=ALL-UNNAMED \
--add-exports javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED \
--add-exports javafx.graphics/com.sun.javafx.scene.layout=ALL-UNNAMED
Спасибо!
Редактировать 1: минимальный воспроизводимый пример
- загрузить последнюю версию intellij
- создать новый шаблонный проект javafx
- добавить библиотеки javafx
добавить следующую строку в аргументы командной строки в конфигурациях запуска
-путь к модулю "C: \ Program Files \ Java \ javafx-sdk-11.0.2 \ lib" \ --add-modules javafx.fxml, javafx.controls
Примечание: пожалуйстапроверьте правильность пути к библиотекам.
Измените метод запуска следующим образом:
@ Переопределить общий запуск void (Stage primaryStage), вызывает исключение {Button button = new Button ();primaryStage.setTitle ("Hello World");primaryStage.setScene (новая сцена (новая группа (), 300, 275));primaryStage.show ();}
Важное примечание: Пожалуйста, убедитесь, что кнопка из javafx, а не из библиотеки awt! Это будет работать, если вы импортируете кнопку из awt по ошибке.
Кнопка никогда не добавляется в корень (ни в сцену), и если вы прокомментируете строку, которая создает кнопку, все работает!
Редактировать 2:
ПохожеЯ запускаю созданную мной конфигурацию, поскольку командная строка, которую создает intellij (когда я нажимаю ...), выглядит следующим образом:
"C:\Program Files\Java\jdk-12.0.2\bin\java.exe" --add-modules javafx.base,javafx.graphics --add-reads javafx.base=ALL-UNNAMED --add-reads javafx.graphics=ALL-UNNAMED "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2019.1\lib\idea_rt.jar=50712:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2019.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\Users\dusan\Documents\untitled\out\production\untitled;C:\Program Files\Java\javafx-sdk-11.0.2\lib\javafx.web.jar;C:\Program Files\Java\javafx-sdk-11.0.2\lib\javafx.swing.jar;C:\Program Files\Java\javafx-sdk-11.0.2\lib\javafx.media.jar;C:\Program Files\Java\javafx-sdk-11.0.2\lib\javafx.graphics.jar;C:\Program Files\Java\javafx-sdk-11.0.2\lib\javafx.fxml.jar;C:\Program Files\Java\javafx-sdk-11.0.2\lib\javafx.controls.jar;C:\Program Files\Java\javafx-sdk-11.0.2\lib\javafx.base.jar;C:\Program Files\Java\javafx-sdk-11.0.2\lib\javafx-swt.jar" -p "C:\Program Files\Java\javafx-sdk-11.0.2\lib\javafx.base.jar;C:\Program Files\Java\javafx-sdk-11.0.2\lib\javafx.graphics.jar" sample.Main --module-path "C:\Program Files\Java\javafx-sdk-11.0.2\lib" \ --add-modules javafx.fxml,javafx.controls