因此,我对此有很多Google搜索,并发现了多个问题,这些问题具有相似甚至不相同的问题,但他们的答案仍然对我不起作用。
提供一些背景信息:我已经有一个要使用Javafx实现GUI的应用程序,并且刚刚将我的应用程序更新为Java 12,在添加任何与Javafx相关的东西之前,一切仍然运行良好。
然后按照一些指南,添加javafx(而不是从begginig完全将其创建为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
因此,在大多数情况下,我见过的最常见的解决方案是向VM添加某些参数(尝试了很多),但没有用。还尝试找到任何有冲突的JDK内容,以防万一我将项目从JDK 11移到12,但也没有用。因此,经过大量的时间,我放弃了并决定在这里询问,即使问题与先前的问题极为相似,只是他们的解决方案对我不起作用。也许我设置错误的东西,也许考虑我正在使用Maven时,我做的事情不正确或搞砸了。另外,我通常对编程还是比较陌生的,因此,如果有些问题没有道理,或者从入门开始不清楚某些内容,对不起。
编辑:我从我的IDE而不是Maven插件运行它。至于我已经使用过哪些VM参数,不确定是从内存中确切获取的,而是几乎可以在先前解决的stackoverflow问题以及在搜索异常/错误时弹出的类似站点中看到的任何参数。我认为只有我从未尝试过的那些尝试将整个Javafx SDK库加载到程序中的程序,因为据我了解,在已经将其与Maven依赖项一起加载时就不需要了。
编辑2:解决它,这是我感到愚蠢的部分。因此,我猜这只是一个新手错误,但是对于在同一地点的任何人,请从Maven插件运行程序,而不是从IDE运行工具本身运行。像魅力一样工作。
答案 0 :(得分:-3)
这之前发生在我身上。只需切换到更稳定的Java版本,就可以了。那对我有用。 Java 12是Java的不稳定版本,仍在开发中,因此建议您迁移到Java 8。