【问题标题】:JavaFX InvocationTargetException thrown when trying to create a Button尝试创建按钮时引发 JavaFX InvocationTargetException
【发布时间】:2019-03-20 18:33:51
【问题描述】:

我遇到了一些奇怪的行为。我正在尝试编写一个简单的 GUI 来帮助我与我的大学项目进行交互,所以我没有使用 fxml。到目前为止,JavaFX 一切正常——我可以创建场景、画布等。但是当我尝试创建一个按钮时,它会抛出一个错误。即使这是我唯一想做的事情,即:

public class SnakePlayback extends Application {

public static void main(String[] args) {
    launch(args);
}

@Override
public void start(Stage primaryStage) {
    Button button = new Button("text");
}
}

这是我得到的错误:

应用程序启动方法中的异常 java.lang.reflect.InvocationTargetException 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.base/java.lang.reflect.Method.invoke(Method.java:566) 在 javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464) 在 javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363) 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.base/java.lang.reflect.Method.invoke(Method.java:566) 在 java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051) 引起:java.lang.RuntimeException:应用程序启动方法中的异常 在 javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:900) 在 javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195) 在 java.base/java.lang.Thread.run(Thread.java:834) 原因:java.lang.IllegalAccessError:超类访问检查失败:com.sun.javafx.scene.control.ControlHelper 类(在未命名模块@0x84d43ff 中)无法访问com.sun.javafx.scene.layout.RegionHelper 类(在模块中javafx.graphics) 因为模块 javafx.graphics 不会将 com.sun.javafx.scene.layout 导出到未命名的模块 @0x84d43ff 在 java.base/java.lang.ClassLoader.defineClass1(本机方法) 在 java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016) 在 java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174) 在 java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:802) 在 java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:700) 在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:623) 在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) 在 java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) 在 java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) 在 javafx.scene.control.Control.(Control.java:86) 在 GUI.SnakePlayback.start(SnakePlayback.java:30) 在 javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846) 在 javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455) 在 javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428) 在 java.base/java.security.AccessController.doPrivileged(本机方法) 在 javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427) 在 javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96) 在 javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(本机方法) 在 javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174) ... 1 更多 运行应用程序 GUI.SnakePlayback 时出现异常

我从中可以看出,这可能是与反射有关的错误。这不是我第一次在尝试创建按钮时看到这个!上次抛出异常只需要声明一个按钮,即:

Button button;

然而,这一次,我真的需要使用按钮。

【问题讨论】:

标签: java user-interface button javafx invocationtargetexception


【解决方案1】:

你得到这个是因为你使用了 controlsfx(它包含 Button 类),它需要一个名为 graphics 的模块

....(in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.scene.layout to unnamed module

如果您使用的是 Java11,则需要将图形模块添加到 VM 选项中。

如果您使用的是 Java12,则需要删除 VM 选项才能使其正常工作。

查看这篇文章Set Up JavaFx on IntelliJ

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 2018-11-12
    • 2019-11-19
    相关资源
    最近更新 更多