微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java 无法读取 font.ttf

如何解决Java 无法读取 font.ttf

我正在尝试使用 JFrame 用 Ja​​va 制作游戏,并且正在处理标题屏幕。对于我的标题,我尝试使用我下载的自定义字体,并将其保存在名为“titleFont.ttf”的文件层次结构中。但是,在使用代码(如下)时,我不断收到以下错误

在 Main.java 中:

public class Main {

    public static void main(String[] args) {
        
        Setup.loadFont("assets/titleFont.ttf");
        
        // Create the window
        new AppWindow(Setup.window,Setup.width,Setup.height,Setup.content,Setup.titlePanel);
        System.out.println("Window running...");

    }

}

在 Setup.java 中:

public static Font loadFont(String path) {

    
    try {
        
        InputStream fileStream = Font.class.getResourceAsstream(path);
        Font myFont = Font.createFont(Font.TRUETYPE_FONT,fileStream);
        return myFont.deriveFont(Font.PLAIN,12f);
        
    } catch (FontFormatException | IOException e) { e.printstacktrace(); }
    
    return null;
    
}

java.io.IOException: Problem reading font data.
at java.desktop/java.awt.Font.createFont0(Font.java:1183)
at java.desktop/java.awt.Font.createFont(Font.java:1052)
at engine.Main.loadFont(Main.java:25)
at engine.Main.main(Main.java:12)

这是我的文件设置:

file setup

有人可以让我知道我需要修复什么,以及如何修复?先感谢您!另外,这是否意味着我只是加载字体,而不是将其设置为使用?如果是这样,我该如何设置字体,使屏幕上的文字采用自定义字体样式?

附言我是新手,所以请尝试像没有经验的人一样解释这一点。对不起!

解决方法

File(String) 构造函数将其参数视为相对路径(相对于“当前”目录)。

因此,您可能希望指定一个绝对路径(以“/”开头),或从应用程序启动的位置到文件的实际相对路径。

可能更好的方法是使用从类路径中的资源创建的流(而不是文件)。

有关示例,请参阅对 Cant add custom font with using .getResource() - Java

的公认答案 ,

资源‌‌‌ ‌ ‌‌ ‌‌‌‌‌‌ ‌ ‌‌ ‌‌‌eysrt不在文件系统中创建。测试文件允许对这些文件进行非常相似的访问。应该记住,它们必须由 VM 编译。如果它们具有预期的标签,则 GCC 将在加载文件时自动调用 testFilesPresent()(例如源 A.out)。如果您想要类脚本的模块的类名,您可以使用:TEST.B{}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。