Java无法读取字体

好的,所以使用自定义字体时出现问题.基本上,我会从网上下载一个自定义字体,然后在程序中使用它.当我在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();
    }

文件夹布局

塔防

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

解决方法:

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

您必须使用Classloader的getResourceAsStream方法加载字体文件.为此,您必须将字体文件放在classpath上.

因此,您的代码变为:

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
上一篇:♥和♦在HTML中在Android上显示为黑色,即使CSS中将颜色设置为红色


下一篇:Java语言环境字体问题..?