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函数指定字体)
加载字体文件时的Eclipse Java文件FileInputStream与输入流[重复]