JDK21+NetBeans20下JavaFX项目InvocationTargetException问题求助
JavaFX + JDK21 中使用FontAwesomeIconView出现
NoClassDefFoundError: com/sun/javafx/css/parser/CSSParser的解决方法 问题诊断
从异常堆栈可以明确:de.jensd.fx.glyphs.GlyphIcon类初始化时尝试调用com.sun.javafx.css.parser.CSSParser,但这个类在JDK21对应的JavaFX版本中已被移除/不再对外暴露。旧版de.jensd.fx.glyphs库依赖JavaFX废弃的内部API,因此在高版本环境下触发报错。
解决方案
1. 升级图标库到兼容JavaFX 21的版本
原de.jensd.fx.glyphs库已停止维护,无法适配JavaFX 17+版本,建议替换为活跃维护的Ikonli库:
- Maven项目添加以下依赖:
<dependency> <groupId>org.kordamp.ikonli</groupId> <artifactId>ikonli-fontawesome-pack</artifactId> <version>12.3.1</version> </dependency> <dependency> <groupId>org.kordamp.ikonli</groupId> <artifactId>ikonli-javafx</artifactId> <version>12.3.1</version> </dependency> - NetBeans非Maven项目:手动下载对应jar包,添加到项目库中。
2. 修改FXML文件的组件引用
替换原有的FontAwesomeIconView为Ikonli的FontIcon:
<!-- 替换原import语句 --> <?import org.kordamp.ikonli.javafx.FontIcon?> <!-- 替换用户图标 --> <FontIcon iconLiteral="fa-user" size="5em" layoutX="169.0" layoutY="104.0" /> <!-- 替换关闭按钮图标 --> <FontIcon iconLiteral="fa-times" fill="WHITE" size="2em" />
3. 验证项目配置
- 确保NetBeans项目中JavaFX版本与JDK21匹配(使用JavaFX21);
- 若为模块化项目,在
module-info.java中添加模块依赖:module bikerentalsystem1 { requires javafx.controls; requires javafx.fxml; requires org.kordamp.ikonli.javafx; requires org.kordamp.ikonli.fontawesome; opens bikerentalsystem1 to javafx.fxml; exports bikerentalsystem1; }
4. 备选方案:使用SVG图标直接加载
如果不想更换库,可直接下载FontAwesome的SVG图标文件,用JavaFX原生ImageView加载:
<ImageView fitWidth="50" fitHeight="50" layoutX="169.0" layoutY="104.0"> <image> <Image url="@user-icon.svg" /> </image> </ImageView>
内容的提问来源于stack exchange,提问作者Anurag Verma
相关产品推荐
相关产品推荐

