JavaFX项目报错:ImageIO与BufferedImage不可见该如何修复
问题修复方案
你遇到的是Java 9+模块化系统导致的JDK内置模块可见性问题,同时现有POM配置存在版本不匹配问题,按以下步骤修复即可:
步骤1:修复java.desktop模块可见性(二选一即可)
方案A:项目使用模块化(存在module-info.java)
如果项目src/main/java目录下有module-info.java文件,直接在模块声明中添加java.desktop依赖即可:
module com.mycompany.realestate2021 { // 保留原有其他声明,比如requires javafx.controls;等 requires java.desktop; // 新增此行,引入ImageIO、BufferedImage所属模块 exports com.mycompany.realestate2021; }
方案B:项目未使用模块化(无module-info.java)
给Maven插件添加模块引入参数即可:
- 修改
maven-compiler-plugin配置,添加编译时模块参数:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <release>17</release> <compilerArgs> <arg>--add-modules</arg> <arg>java.desktop</arg> </compilerArgs> </configuration> </plugin>
- 修改
javafx-maven-plugin配置,添加运行时模块参数:
<plugin> <groupId>org.openjfx</groupId> <artifactId>javafx-maven-plugin</artifactId> <!-- 保留其他原有配置 --> <configuration> <mainClass>com.mycompany.realestate2021.App</mainClass> <options> <option>--add-modules</option> <option>java.desktop</option> <!-- 保留原有其他option配置 --> </options> </configuration> </plugin>
步骤2:修正POM版本不匹配问题
你当前使用OpenJDK17、OpenJFX17,现有POM配置版本不一致,需要同步修改:
- 修正properties节点的编译版本,统一管理JavaFX版本:
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> <openjfx.version>17</openjfx.version> </properties>
- 修正OpenJFX依赖版本,补充必要组件:
<dependencies> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-controls</artifactId> <version>${openjfx.version}</version> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-graphics</artifactId> <version>${openjfx.version}</version> </dependency> </dependencies>
- 升级JavaFX Maven插件到适配JDK17的版本:
<plugin> <groupId>org.openjfx</groupId> <artifactId>javafx-maven-plugin</artifactId> <version>0.0.8</version> <!-- 原有0.0.4版本不兼容JDK17 --> <!-- 保留其他原有配置 --> </plugin>
步骤3:验证配置生效
修改完pom.xml后,在NetBeans中右键项目选择「重新加载POM」或「清理并构建」,执行mvn clean compile确认编译报错消失,再执行mvn javafx:run验证程序运行正常即可。
内容的提问来源于stack exchange,提问作者PocketPixie
相关产品推荐
相关产品推荐

