当前位置: 首页 > 知识库问答 >
问题:

从IntelliJ运行JavaFX应用程序

轩辕涵亮
2023-03-14

版本

openjdk版本“11.0.11”2021-04-20

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:78)
    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:78)
    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:1071)
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:831)
Caused by: java.lang.IllegalAccessError: class com.sun.javafx.fxml.FXMLLoaderHelper (in unnamed module @0x6c5aff76) cannot access class com.sun.javafx.util.Utils (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.util to unnamed module @0x6c5aff76
    at com.sun.javafx.fxml.FXMLLoaderHelper.<clinit>(FXMLLoaderHelper.java:38)
    at javafx.fxml.FXMLLoader.<clinit>(FXMLLoader.java:2056)
    at KiloConverter.start(KiloConverter.java:12)
    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:391)
    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.gtk.GtkApplication._runLoop(Native Method)
    at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$11(GtkApplication.java:277)

如果可能的话,请不要告诉我像我以前看到其他人回答的那样“阅读基础知识”。我只是不确定为什么我的代码不能在我的最后一个项目中运行。

提前谢谢你!

共有1个答案

谢铭
2023-03-14

既然您提到您是Java初学者,我首先建议您阅读以下问答:什么是堆栈跟踪,以及如何使用它来调试应用程序错误?。然后,当您回顾堆栈跟踪时,您将看到您得到的基本错误是:

Caused by: java.lang.IllegalAccessError: class com.sun.javafx.fxml.FXMLLoaderHelper (in unnamed module @0x6c5aff76) cannot access class com.sun.javafx.util.Utils (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.util to unnamed module @0x6c5aff76

这是一个与模块相关的错误。您可能希望阅读理解Java9模块以熟悉模块。

在这种情况下,出现错误是因为在类路径上找到了javafx.fxml模块,而在模块路径上找到了javafx.graphics模块。换句话说,javafx.fxml模块未能被解析为命名模块,但它的代码仍然可以在未命名模块中找到。这将破坏javafx.graphics可能给javafx.fxml的限定导出和限定打开指令,结果是IllegalAccesserRor

// or whatever you want to name your module
module app {
  requires javafx.controls;
  requires javafx.fxml;

  // export your Application subclass's package to at least javafx.graphics
  exports com.example.app to javafx.graphics;

  // open your FXML controller package(s) to at least javafx.fxml (allows reflective access)
  opens com.example.app.controllers to javafx.fxml;
}

并将应用程序作为模块启动。例如,这就是命令行中的样子:

java --module-path <path> --module <module>/<main-class>
 类似资料:
  • 我的朋友最近给我发送了我们正在处理的javaFX项目的源代码。但是我无法运行它,因为它没有正确配置。如果我尝试将其配置为“应用程序”,但它不允许我选择MainClass文件。它最初是在Eclipse中编程的。有人能解释一下我如何运行这个程序吗?在项目结构中,我将Artifacts设置为javaFX应用程序,但这似乎没有改变什么。

  • 例如。 这应该运行一个简单的hello world应用程序,摘自oracle文档。然而,当我‘运行’这个代码,没有窗口打开。取而代之的是打开一个名为“Java”的应用程序。看起来'java'只是一个位于'jdk1.8.0_25.jdk/contents/home/bin'中的'UNIX可执行文件‘。应用程序'java'绝对不显示任何东西,并且在没有强制退出的情况下无法关闭。 我在MacBook上运

  • 作为一个软件开发人员,我需要做哪些步骤来允许我的JavaFX应用程序与JDK11+一起运行?有什么好的广告吗?是否可以通过Gradle获得OpenJDK?

  • 我有一个Java1.8Spring启动应用程序,它有一个由Tomcat提供服务的REST接口。应用程序在命令行中作为JAR正常运行。我在IntelliJ中创建了一个Spring启动运行/调试编辑配置,并启动了调试器。 我发现bean创建错误: 知道怎么了吗?

  • 我正在开发一个java应用程序,其中我使用java swing窗体和javafx FXML stage,我对javafx是新手,现在我在应用程序中调用具有控制器的javafx FXML stage,从swing窗体调用FXML stage,单击如下按钮----application.launch(myfxml.class); 下面的代码片段用于调用swing表单-- 我得到的异常是“应用程序启动必

  • 我无法运行JavaFX-Kotlin应用程序。 我的初学者类 我不能将param“args”传递给“launch”方法,因为编译器说: 错误:(19,9)Kotlin:不能使用提供的参数调用以下函数:public open fun launch(p0:class!,vararg p1:string!):javafx.application.application中定义的单元public open