尝试创建Button

时间:2019-03-20 18:33:52

标签: java user-interface button javafx invocationtargetexception

我一直在经历一些奇怪的行为。我试图编写一个简单的GUI来帮助我与大学项目进行交互,所以我没有使用fxml。到现在为止,JavaFX都可以正常工作-我可以创建场景,画布等。但是当我尝试创建Button时,会引发错误。即使这是我唯一要做的事情,也就是:

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(本机方法)       在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(本机方法)       在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;

但是,这一次,我真的需要使用按钮。

1 个答案:

答案 0 :(得分: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