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

JavaFX程序运行与Scene Builder字体显示不一致问题求助

JavaFX 字体在IntelliJ运行时异常但Scene Builder显示正常的解决办法

以下是针对该问题的排查和解决步骤:

1. 确认字体资源的正确部署

Scene Builder会直接读取系统中安装的字体或本地文件,但JavaFX运行时需要从类路径加载字体资源:

  • 将字体文件(如KFGQPCUthmanicScriptHAFS.ttf、Tajawal-Regular.ttf)放在项目的src/main/resources/fonts目录下(无此目录则创建)。
  • 右键该目录,选择Mark Directory as -> Resources Root,确保目录被标记为资源根目录(显示为蓝色)。

2. 手动注册字体(推荐)

自动加载字体可能存在兼容性问题,建议在应用启动时手动加载:

@Override
public void start(Stage stage) throws IOException {
    // 从资源路径加载字体
    Font.loadFont(getClass().getResourceAsStream("/fonts/KFGQPCUthmanicScriptHAFS.ttf"), 12);
    Font.loadFont(getClass().getResourceAsStream("/fonts/Tajawal-Regular.ttf"), 12);

    // 加载FXML并启动应用
    Parent root = FXMLLoader.load(getClass().getResource("/your-view.fxml"));
    Scene scene = new Scene(root);
    stage.setScene(scene);
    stage.show();
}

3. 验证FXML中的字体引用准确性

确保FXML中的字体名称与字体文件的内部全名一致(可通过Windows字体查看器查看字体属性),示例FXML代码:

<Label text="مثال نص عربي" style="-fx-font-family: 'Tajawal'; -fx-font-size: 20;"/>
<Label text="بسم الله الرحمن الرحيم" style="-fx-font-family: 'KFGQPC Uthmanic Script HAFS'; -fx-font-size: 28;"/>

注意:Windows文件名不区分大小写,但JavaFX运行时对字体名称的大小写可能敏感,需严格匹配。

4. 检查IntelliJ的构建配置

  • 打开File -> Project Structure -> Modules -> Paths,确认输出目录(Output Path)正确,资源文件会被复制到该目录下。
  • 如果使用Gradle/Maven,确保资源打包配置正确。例如Gradle:
    sourceSets {
        main {
            resources {
                srcDirs = ["src/main/resources"]
            }
        }
    }
    

5. 清理缓存并重建项目

IntelliJ的缓存可能导致资源未更新:

  1. 执行File -> Invalidate Caches...
  2. 选择Invalidate and Restart
  3. 重启后执行Build -> Rebuild Project

6. 启用字体加载调试日志

在IntelliJ的运行配置中添加VM参数:-Djavafx.font.debug=true,运行程序后查看控制台日志,可获取字体加载的详细信息,定位未加载成功的字体文件。

内容的提问来源于stack exchange,提问作者Mohamed Tarek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 10:46:11