Java 加载自定义字体文件 (.ttf)

标签 java fonts custom-font

我在下面使用了这段代码,它提出了这个堆栈跟踪:

java.io.FileNotFoundException: font.ttf (No such file or directory)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:146)
    at java.io.FileInputStream.<init>(FileInputStream.java:101)
    at com.ominious.core.graphics.Assets.getFont(Assets.java:55)
    at com.ominious.core.graphics.Assets.loadImages(Assets.java:37)
    at com.ominious.core.GamePanel.init(GamePanel.java:63)
    at com.ominious.core.GamePanel.run(GamePanel.java:69)
    at java.lang.Thread.run(Thread.java:744)
Exception in thread "Thread-1" java.lang.NullPointerException
    at com.ominious.core.graphics.Assets.loadImages(Assets.java:49)
    at com.ominious.core.GamePanel.init(GamePanel.java:63)
    at com.ominious.core.GamePanel.run(GamePanel.java:69)
    at java.lang.Thread.run(Thread.java:744)

我使用此代码(我在我知道有效的资源文件中调用该方法)

    private static Font getFont(String name) throws Exception {

    Font font = Font.createFont(Font.TRUETYPE_FONT, new FileInputStream(name));

    return font;
}

我在这里称它为:

try {
        FONT = getFont("font.ttf");

        tileSprites = ImageIO.read(getClass().getResourceAsStream("/mom.gif"));

        SPLASH_BACKGROUND = ImageIO.read(getClass().getResourceAsStream("/swag.gif"));

    } catch (Exception e) {
        Game.logger.log(LogType.ERROR_STACKTRACE);

        e.printStackTrace();
    }

(上面的类有效,我的图像加载)

这不起作用有什么原因吗?有没有更好的方法? (是的,我的目录中确实有它)

最佳答案

从资源中加载字体并不难,就像加载图像一样。我知道这个问题是一年前提出的,但我希望最终能提供答案。

只需使用文档 here ,其中详细介绍了如何将自定义字体加载到 GraphicsEnvironment 中。它应该如下所示:

    GraphicsEnvironment ge = null;
    try{
      ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
      ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, game.getClass().getResourceAsStream("/fonts/fantasy.TTF")));
    } catch(FontFormatException e){} catch (IOException e){}

注意:我使用 classInstance.getClass().getResourceAsStream(String fileDir) 从 Jar 文件中的资源目录中加载文件。

在图形环境中注册字体后,该字体可在 getAvailableFontFamilyNames() 调用中使用,并可在字体构造函数中使用。

希望这最终能回答你的问题!

关于Java 加载自定义字体文件 (.ttf),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21210204/

相关文章:

java - java.io.DataOutputStream 类中的 writeChar 和 writeShort 方法有什么区别?

c++ - 使用 DEFAULT_GUI_FONT 设置 HFONT 的字体大小

html - 字体文件(例如 .ttc .ttf .otf)是否包含不同的权重?

java - 将 truetype 字体文件与 Font.createFont 一起使用时文本规范错误

android - 如何在 FFmpeg 创建的水印上应用自定义字体

android - Android Studio中的 Assets 文件夹?

css - Firefox 无法识别自定义字体

java - 使用 Jmeter 将文件从本地计算机传输到服务器

java - 获取包 javax.ws.rs 不存在错误

java - Cassandra SSTableLoader : failed to list files in <directory_path>