Java:字体不加载(来自外部文件)

Posted

技术标签:

【中文标题】Java:字体不加载(来自外部文件)【英文标题】:Java: Font does not load (from external file) 【发布时间】: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解决(见***.com/questions/13717481/setting-custom-font) 【参考方案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,以便任何捕获都阻止您的应用程序加载。

【讨论】:

以上是关于Java:字体不加载(来自外部文件)的主要内容,如果未能解决你的问题,请参考以下文章

应用程序加载外部字体文件(使用AddFontResource API函数指定字体)

Java——自定义外部字体文件

java如何加载一个外部的类或class文件

加载字体文件时的Eclipse Java文件FileInputStream与输入流[重复]

为了让 WebView 正确加载 css 和字体文件,我应该提供哪个基本 url?

egret:添加外部字体