You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 18:02:03