JavaFX 模块 javafx.graphics

标签 javafx java-11

在修复了 robots.awt 的需求问题后,我现在在运行应用程序时遇到了另一个问题。应用程序构建没有任何问题。堆栈跟踪:

Exception in Application constructor
Exception in thread "main" 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:566)
    at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
Caused by: java.lang.RuntimeException: Unable to construct Application instance: class reports.Main
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:890)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
    at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.IllegalAccessException: class com.sun.javafx.application.LauncherImpl (in module javafx.graphics) cannot access class reports.Main (in module Reports) because module Reports does not export reports to module javafx.graphics
    at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:361)
    at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:591)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$8(LauncherImpl.java:802)
    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(Native Method)
    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

Process finished with exit code 1

最佳答案

问题的根本原因包含在这一行中:

Caused by: java.lang.IllegalAccessException: class com.sun.javafx.application.LauncherImpl (in module javafx.graphics) cannot access class reports.Main (in module Reports) because module Reports does not export reports to module javafx.graphics

Application.launch 使用反射来创建应用程序类的实例。仅当类位于打开或导出到 Application 模块 (javafx.图形)。

您需要在 Reports 模块声明中添加以下行之一:

exports reports;
opens reports to javafx.graphics;

最后一行应该是首选,因为它的限制性更强。如果除非 reports 包还包含例如一个 main 类/方法,您应该使用第一行。

关于JavaFX 模块 javafx.graphics,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59754713/

相关文章:

JavaFx 与 Swing 图像可视化

java - 替代 SplitPane 来分割 "content",加上 TitlePane 折叠/展开问题;我应该用什么代替?

java - Swing 应用程序在 Java 11+ Linux 上速度较慢

java - 带有 jlink 创建运行时的 SSLHandshakeException

java - Eclipse + m2e + junit5 - 已经可能了吗?

java - 如何将基于多个条件的 header 添加到 HttpRequest Java 11?

java - Mp3 播放器 JavaFX

JavaFX 8 媒体播放器进度 slider

java - 如何向地址簿程序添加删除和编辑功能?

java - 在 checkPermission 方法中加载某些类时,为什么 SecurityManager 会发出递归更新异常?