Итак, у меня есть (google) (много) по этому поводу, и я нашел несколько вопросов с похожими, если не идентичными проблемами, но их ответы по-прежнему не работают для меня.
Для обеспечения некоторого контекста: Iу меня уже есть приложение, в котором я хотел реализовать GUI с Javafx, а также просто обновил свое приложение до Java 12, все по-прежнему работало отлично до добавления чего-либо связанного с javafx.
Затем, следуя некоторым инструкциям, добавить javafx(вместо того, чтобы полностью создать его как проект Javafx с самого начала, не уверен, что это может создать проблему), поскольку он отсутствует в Java JDK 12, я добавил его через следующие зависимости Maven:
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>12</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>12</version>
</dependency>
Затем кодировал это в начале класса Main в моем приложении:
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
primaryStage.setTitle("Test title");
Button button = new Button();
button.setText("Click me!");
StackPane layout = new StackPane();
layout.getChildren().add(button);
Scene scene = new Scene(layout, 300, 250);
primaryStage.setScene(scene);
primaryStage.show();
}
Создайте его успешно, запустите, выдает следующие исключения / ошибки:
Exception in Application start method
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
Caused by: java.lang.RuntimeException: Exception in Application start method
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:900)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
at java.base/java.lang.Thread.run(Thread.java:835)
Caused by: java.lang.IllegalAccessError: superclass access check failed: class com.sun.javafx.scene.control.ControlHelper (in unnamed module @0x20e621ae) 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 @0x20e621ae
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:151)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:802)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:700)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:623)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at javafx.scene.control.Control.<clinit>(Control.java:86)
at amaio.Main.start(Main.java:19)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:389)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
... 1 more
Итак, дляпо большей части самое распространенное решение, которое я видел, - добавление к виртуальной машине определенных параметров (много пробовал), не сработало.Также пытался найти какие-либо противоречивые вещи JDK на всякий случай, так как я только что переместил свой проект с JDK 11 на 12, но тоже не сработал.Поэтому через много часов я сдался и решил спросить здесь, даже если вопрос очень похож на предыдущие, просто то, что их решения не сработали для меня.Может быть, я настроил что-то неправильно, может, я что-то делаю неправильно или что-то напутал, учитывая, что я использую Maven.Кроме того, я относительно новичок в программировании в целом, поэтому извините, если некоторые вопросы не имеют смысла, или некоторые вещи не ясны с самого начала.
РЕДАКТИРОВАТЬ: я запускаю его из моей IDE, а не плагин Maven.Относительно того, какие параметры виртуальной машины я уже использовал, точно не знаю, какие именно из памяти, но почти все, что мы видели в предыдущих решенных вопросах о стековом потоке и подобных сайтах, которые появляются при поиске исключений / ошибок.Я думаю, что только те, которые я не пробовал, - это те, которые пытаются загрузить всю библиотеку Javafx SDK в программу, поскольку, насколько я понимаю, она не нужна, если она уже загружена с зависимостями Maven.
РЕДАКТИРОВАТЬ2: Решенный это, это - часть, когда я чувствую себя глупым.Так что, это просто ошибка новичка, я думаю, но для любого, кто находится на моем месте, запустите программу из подключаемых модулей Maven вместо самого инструмента запуска IDE.Работал как шарм.