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

重启Eclipse后自定义字体失效问题求助

自定义字体在Eclipse重启后失效的问题解决

开发项目时,重启Eclipse后自定义字体完全失效,运行时抛出字体读取异常和空指针错误。

相关代码

private static Font vollkornBold;

static {
    try (InputStream in = Program.class.getClassLoader().getResourceAsStream("TextBasedAdventure/src/main/assets/VollkornSC-Bold.ttf")) {
        vollkornBold = Font.createFont(Font.TRUETYPE_FONT, in);
    } catch (FontFormatException | IOException e) {
        e.printStackTrace();
    }
}

触发错误的代码

titleAdventureLabel.setFont(vollkornBold.deriveFont(Font.BOLD, 100));

报错信息

java.io.IOException: Problem reading font data.
at java.desktop/java.awt.Font.createFont0(Font.java:1208)
at java.desktop/java.awt.Font.createFont(Font.java:1076)
at TextBasedAdventure/main.Program.(Program.java:27)
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.awt.Font.deriveFont(int, float)" because "main.Program.vollkornBold" is null
at TextBasedAdventure/main.Program.(Program.java:113)
at TextBasedAdventure/main.Program.main(Program.java:88)

已尝试的解决方法

  • 重写代码
  • 重新粘贴字体文件
  • 移动assets文件夹
  • 考虑重装Eclipse

问题分析与解决方案

核心问题

getResourceAsStream使用了项目文件系统的绝对路径,而非classpath路径,导致类加载器无法找到字体文件,最终vollkornBold为null,触发空指针异常。

具体修复步骤

  1. 修正资源路径

    • 确保assets文件夹位于项目的资源目录下(如Maven的src/main/resources、Gradle的src/main/resources),编译后该目录下的文件会被自动放入classpath根目录。
    • 将资源路径改为assets/VollkornSC-Bold.ttf,修改后的代码:
      private static Font vollkornBold;
      
      static {
          try (InputStream in = Program.class.getClassLoader().getResourceAsStream("assets/VollkornSC-Bold.ttf")) {
              if (in == null) {
                  System.err.println("字体文件未找到,请检查路径或资源目录配置");
                  return;
              }
              vollkornBold = Font.createFont(Font.TRUETYPE_FONT, in);
          } catch (FontFormatException | IOException e) {
              e.printStackTrace();
          }
      }
      
  2. 验证资源打包情况

    • 编译项目后,检查target/classes(Maven)或build/classes/java/main(Gradle)目录下是否存在assets/VollkornSC-Bold.ttf文件。如果不存在,在Eclipse中右键项目 → Build Path → Configure Build Path → Source,将src/main/resources标记为Source Folder,确保资源能被正确复制到输出目录。
  3. 添加空指针防护
    在设置字体前判断字体对象是否为null,避免运行时崩溃:

    if (vollkornBold != null) {
        titleAdventureLabel.setFont(vollkornBold.deriveFont(Font.BOLD, 100));
    } else {
        // 降级使用默认字体
        titleAdventureLabel.setFont(new Font(Font.SERIF, Font.BOLD, 100));
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 22:48:22