JavaFX16 警告:不支持的 JavaFX 配置:类是从“未命名模块 @***”加载的
Posted
技术标签:
【中文标题】JavaFX16 警告:不支持的 JavaFX 配置:类是从“未命名模块 @***”加载的【英文标题】:JavaFX16 WARNING: Unsupported JavaFX configuration: classes were loaded from 'unnamed module @***' 【发布时间】:2021-07-09 06:58:32 【问题描述】:我正在尝试使用 OpenJDK16 运行 JavaFX16 应用程序(应用程序本身是通过 Java 1.8 编写的)。不幸的是,每次运行我的应用程序时,我都会收到以下警告消息:
--- exec-maven-plugin:3.0.0:exec (default-cli) @ ListPlanWizard --- 申请。 2021 年 14 月 14 日下午 12:46:53 com.sun.javafx.application.PlatformImpl 启动 警告:不支持的 JavaFX 配置:类是从“未命名模块 @1cebc698”加载的
请您解释一下我为什么会得到它以及如何避免这种情况?
请注意,与此或类似问题的其他问题不同 我在互联网上发现的警告我的应用程序没有 在此之后崩溃或按预期工作。
另外请注意,我使用来自this question 的提示来避免 错误:缺少 JavaFX 运行时组件,需要运行此应用程序
我不使用外部 JavaFX OpenSDK 或项目属性中的其他内容。
我的 pom.xml 文件附在下面:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>bla.blabla</groupId>
<artifactId>ListPlanWizard</artifactId>
<version>0.9.3</version>
<packaging>jar</packaging>
<name>ListPlanWizard</name>
<description>blablablablabla</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<start-class>bla.blabla.ListPlanWizard.Crutch</start-class>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Used to work with the older excel file format - .xls -->
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<!-- Used to work with the newer excel file format - .xlsx -->
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>16</version>
</dependency>
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.6</version>
<configuration>
<mainClass>bla.blabla.ListPlanWizard.Crutch</mainClass>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>java</executable>
<compilerArguments>
<excludeDevtools>true</excludeDevtools>
</compilerArguments>
</configuration>
</plugin>
</plugins>
</build>
</project>
感谢您提前回答!
【问题讨论】:
请不要截图文本.. 而不是 c&p 文本 @kleopatra 已修复,谢谢 我注意到的第一件事是,在属性中你有 java 1.8 版,但你使用的是 OpenJDK16 这是 JavaFX 16 中的新事物——请参阅 JDK-8256362。一般的解决方法是将 JavaFX 模块放在模块路径上并确保它们被解析为模块(例如,如果您的代码不是模块化的,您可能需要使用--add-modules
)。尽管注意在模块路径上使用 JavaFX 并不要求 您的代码 是模块化的。不幸的是,我不知道在使用 Maven 时会解决什么问题(因此是评论而不是回答)。
@Dahlin 正如我在问题帖子中提到的那样,该应用程序是通过 java 1.8 编写的,但现在我使用的是 OpenJDK16。但是,应用程序的源代码/二进制格式保持不变。
【参考方案1】:
// For Gradle ....
// Add the code in your 'build.gradle'.
// Javafx modules will be fetched from classpath...
// No warnings thereafter..
run
doFirst
jvmArgs = [
'--module-path', classpath.asPath,
'--add-modules', 'javafx.controls',
'--add-modules', 'javafx.fxml',
'--add-modules', 'javafx.graphics',
'--add-modules', 'javafx.base',
'--add-modules', 'javafx.swing',
]
【讨论】:
不鼓励仅使用代码回答。请提供您的答案如何解决问题的摘要,以及为什么它可能比提供的其他答案更可取。以上是关于JavaFX16 警告:不支持的 JavaFX 配置:类是从“未命名模块 @***”加载的的主要内容,如果未能解决你的问题,请参考以下文章