找不到javafx.controls JavaFX 11 / JDK 11.0.1 [重复]

Posted

技术标签:

【中文标题】找不到javafx.controls JavaFX 11 / JDK 11.0.1 [重复]【英文标题】:javafx.controls could not be found JavaFX 11 / JDK 11.0.1 [duplicate] 【发布时间】:2019-05-06 03:08:02 【问题描述】:

我正在使用 InteliJ,我已经完成了所有其他似乎对其他人都有效的解决方案。我收到一个错误:

Caused by: java.lang.IllegalAccessError: class com.sun.javafx.fxml.FXMLLoaderHelper (in unnamed module @0x5782d366) 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 @0x5782d366

然后我将以下内容添加到运行配置中的 VM 选项中:

--module-path="C:\Users\mresp_000\Desktop\Business\Code\SDKS\javafx-sdk-11.0.1\lib" \ 
    --add-modules=javafx.controls \
    --add-exports=javafx.graphics/com.sun.javafx.util=ALL-UNNAMED \
    --add-exports=javafx.base/com.sun.javafx.reflect=ALL-UNNAMED \
    --add-exports=javafx.base/com.sun.javafx.beans=ALL-UNNAMED \
    --add-exports=javafx.graphics/com.sun.glass.utils=ALL-UNNAMED \
    --add-exports=javafx.graphics/com.sun.javafx.tk=ALL-UNNAMED

这似乎部分解决了问题?但是,当我尝试运行它时,我没有得到完整的错误堆栈跟踪,我得到以下三行:

"C:\Program Files\Java\jdk-11.0.1\bin\java.exe" \
    --module-path=C:\Users\mresp_000\Desktop\Business\Code\SDKS\javafx-sdk-11.0.1\lib \
    --add-modules=javafx.controls,javafx.fxml \
    --add-exports=javafx.graphics/com.sun.javafx.util=ALL-UNNAMED \
    --add-exports=javafx.base/com.sun.javafx.reflect=ALL-UNNAMED \
    --add-exports=javafx.base/com.sun.javafx.beans=ALL-UNNAMED \
    --add-exports=javafx.graphics/com.sun.glass.utils=ALL-UNNAMED \
    --add-exports=javafx.graphics/com.sun.javafx.tk=ALL-UNNAMED \
    --add-modules javafx.base,javafx.graphics \
    --add-reads javafx.base=ALL-UNNAMED \
    --add-reads javafx.graphics=ALL-UNNAMED \
    "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2018.3\lib\idea_rt.jar=60572:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2018.3\bin" \
    -Dfile.encoding=UTF-8 \
    -classpath C:\Users\mresp_000\Desktop\Business\Code\VirtualBeats\out\production\VirtualBeats;\
        C:\Users\mresp_000\Desktop\Business\Code\SDKS\javafx-sdk-11.0.1\lib\src.zip;\
        C:\Users\mresp_000\Desktop\Business\Code\SDKS\javafx-sdk-11.0.1\lib\javafx-swt.jar;\
        C:\Users\mresp_000\Desktop\Business\Code\SDKS\javafx-sdk-11.0.1\lib\javafx.web.jar;\
        C:\Users\mresp_000\Desktop\Business\Code\SDKS\javafx-sdk-11.0.1\lib\javafx.base.jar;\
        C:\Users\mresp_000\Desktop\Business\Code\SDKS\javafx-sdk-11.0.1\lib\javafx.fxml.jar;\
        C:\Users\mresp_000\Desktop\Business\Code\SDKS\javafx-sdk-11.0.1\lib\javafx.media.jar;\
        C:\Users\mresp_000\Desktop\Business\Code\SDKS\javafx-sdk-11.0.1\lib\javafx.swing.jar;\
        C:\Users\mresp_000\Desktop\Business\Code\SDKS\javafx-sdk-11.0.1\lib\javafx.controls.jar;\
        C:\Users\mresp_000\Desktop\Business\Code\SDKS\javafx-sdk-11.0.1\lib\javafx.graphics.jar \
    -p C:\Users\mresp_000\Desktop\Business\Code\SDKS\javafx-sdk-11.0.1\lib\javafx.base.jar;\
        C:\Users\mresp_000\Desktop\Business\Code\SDKS\javafx-sdk-11.0.1\lib\javafx.graphics.jar \
    virtualbeats.Main
Error occurred during initialization of boot layer
java.lang.module.FindException: Module javafx.controls not found

Process finished with exit code 1

当我只在 VM 选项中输入以下内容时,我得到了同样的错误:

--module-path="C:\Users\mresp_000\Desktop\Business\Code\SDKS\javafx-sdk-11.0.1\lib"
--add-modules=javafx.controls,javafx.fxml

这是我的run options 的图片(我已经勾选和取消勾选“包含依赖项和提供的范围”框,都不起作用。

库指向正确的位置,我已经尝试重建项目,但没有任何效果。当我转到命令行并输入:

dir "C:\Users\mresp_000\Desktop\Business\Code\SDKS\javafx-sdk-11.0.1\lib"

我得到以下输出:

所以事实上一切都在那里,并指向它需要指向的确切位置。将 .jar 扩展名添加到 add-module 也不会执行任何操作。

【问题讨论】:

@JoséPereda 但该错误听起来具有误导性,不是吗?造成这种情况的根本原因是什么?我的意思是 IllegalAccessError 之一。 @Mehdi - 从 Java11 开始,您可以从这里开始使用 openjfx - openjfx.io/openjfx-docs/#introduction。 @nullpointer 是的,我的错,我最初不明白这个问题 @nullpointer 对,这个question 可能也会有所帮助。这是两个问题的混合体。 @nullpointer 异常本身与 JavaFX 库的错误路径有关。尽管如此,模块javafx.fxml 也应该被添加。 【参考方案1】:

试试:

--module-path C:\Users\mresp_000\Desktop\Business\Code\SDKS\javafx-sdk-11.0.1\lib --add-modules=ALL-MODULE-PATH

作为Runconfiguration,我不知道,也许它可以工作?

【讨论】:

【参考方案2】:

或者,将您的项目转换为 Maven,然后将 JavaFX 依赖项添加为:

<!-- JavaFx -->
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-base</artifactId>
            <version>15</version>
        </dependency>

        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>15</version>
        </dependency>

        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-graphics </artifactId>
            <version>15</version>
            <classifier>win</classifier>
        </dependency>

        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-fxml</artifactId>
            <version>15</version>
        </dependency>

        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-web</artifactId>
            <version>15</version>
        </dependency>

        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-media</artifactId>
            <version>15</version>
        </dependency>

         <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-swing</artifactId>
            <version>15</version>
        </dependency>

根据您使用的 Java 版本更改版本,因为 Java 10 以上的任何内容都不包含 JavaFX 库,如果您想在其他机器上部署应用程序,我建议您这样做

【讨论】:

以上是关于找不到javafx.controls JavaFX 11 / JDK 11.0.1 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

JavaFX: Alert 弹窗

在 java 13 中找不到模块 javafx.base [重复]

Java + JavaFX:错误:找不到或加载主类

JavaFx:JavaFx使用beetl模板,解决“找不到指定模板或者加载模板错(TEMPLATE_LOAD_ERROR)”问题

JavaFx:JavaFx使用beetl模板,解决“找不到指定模板或者加载模板错(TEMPLATE_LOAD_ERROR)”问题

JavaFx:JavaFx使用beetl模板,解决“找不到指定模板或者加载模板错(TEMPLATE_LOAD_ERROR)”问题