Java无法读取字体

时间:2015-12-25 21:44:27

标签: java fonts

好的,所以使用自定义字体时遇到问题。基本上我得到一个我从网上下载并在我的程序中使用它的自定义字体。当我在Eclipse(我使用的编辑器)中运行程序时,一切正常,没有问题。但是,每当我从eclipse将它导出到jar,或者尝试从命令提示符运行它时,我都会遇到这个非常恼人的错误:

java.io.IOException: Can't read REVOLUTION.ttf
    at java.awt.Font.createFont(Unknown Source)
    at TowerDefense.<init>(TowerDefense.java:55)
    at TowerDefense.main(TowerDefense.java:302)

我得到了一堆空指针异常,因为我使用的是字体。但我不知道为什么它说不能读它。以下是创建字体的代码:

try {
        revolution = Font.createFont(Font.TRUETYPE_FONT, new File("REVOLUTION.ttf"));
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        ge.registerFont(revolution);
    }
    catch (Exception e) {
        e.printStackTrace();
    }

FOLDER LAYOUT

塔防游戏

src
    default package
        TowerDefense.java
        Game.java
        DragTest.java
JRE System Library
REVOLUTION.ttf
neuropol.ttf

1 个答案:

答案 0 :(得分:4)

您无法使用File API访问JAR的内容。

您必须使用Classloader&#39; getResourceAsStream方法加载字体文件。为此,您必须将字体文件放在类路径上。

所以你的代码变成了:

revolution = Font.createFont(Font.TRUETYPE_FONT, getClass().getClassLoader().getResourceAsStream("REVOLUTION.ttf"));

如果字体包含在JAR中的包或文件夹中,则路径会相应更改。

getResourceAsStream("com/example/font/REVOLUTION.ttf"); // if font is present inside com.example.font package