【问题标题】:Java: Font does not load (from external file)Java:字体不加载(来自外部文件)
【发布时间】:2015-06-06 10:28:42
【问题描述】:

在一个名为 data 的文件夹中,我有一个名为 font.ttf 的字体文件。

我想读进去,像这样:

try {
   Font f = Font.createFont(Font.TRUETYPE_FONT, 
      new File("data/font.ttf")).deriveFont(12.0);
} catch (IOException | FontFormatException e) {}

直到我从 system 中删除了相同的字体(它仍在数据文件夹中!)之前,它都运行良好。 现在,它只是显示 Java 的通用字体。

是否甚至可以从不在系统字体文件夹中的文件中读取字体?

【问题讨论】:

  • 该代码将无法编译。请编辑您的问题以显示您的实际代码,包括处理 IOException 和 FontFormatException 的 catch 块。
  • 好的,添加了catch块。
  • 真的发生了异常吗?我建议您将 println 替换为 throw new RuntimeException(e);。除非你真的希望你的应用程序在没有加载字体的情况下运行。
  • 它没有抛出任何异常。这很奇怪,因为字体文件实际上就在那里。如果系统上实际安装了字体,那么“引用文件”的事情就会起作用。
  • 使用GraphicsEnvironment解决(见stackoverflow.com/questions/13717481/setting-custom-font

标签: java fonts awt


【解决方案1】:

一旦你加载了Font f,你似乎并没有对它做任何事情,所以你可能只是因为块作用域而丢失了它。

Font fallback = load some system default;
Font myfont = null;

...

try {
  File ffile = new File("data/font.ttf");
  myfont = Font.createFont(Font.TRUETYPE_FONT, ffile).deriveFont(12);
} catch (FontFormatException ffe) {
  System.out.println("Tried to load a bad font...");
  ffe.printStackTrace();
} catch (IOException ioe) {
  System.out.println("I have no idea what went wrong");
  ioe.printStackTrace();
} finally {
  loadMyApplication(myfont == null ? fallback : myfont);
}

或者,如果您绝对需要该字体来正确构建 UI 或内容呈现,请在 try 块中调用 loadMyApplication,以便任何捕获都阻止您的应用程序加载。

【讨论】:

    猜你喜欢
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    相关资源
    最近更新 更多