【问题标题】:Java - How to Load a Custom Font From a Resources FolderJava - 如何从资源文件夹加载自定义字体
【发布时间】:2021-04-03 13:50:01
【问题描述】:

我正在使用 java swing 来创建一个应用程序,但我也一直在尝试加载一些字体! 这是问题所在: 当我尝试使用以下代码加载它们时,我有一个带有一些自定义字体的资源文件夹:

    public static Font CustomFont(String path) {
        Font customFont = loadFont(path, 24f);
        System.out.println(customFont == null);
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        ge.registerFont(customFont);
        return customFont;

    }
    public static Font loadFont(String path, float size){
        try {
            Font myFont = Font.createFont(Font.TRUETYPE_FONT, Launcher.class.getResourceAsStream(path));
            return myFont.deriveFont(Font.PLAIN, size);
        } catch (FontFormatException | IOException e) {
            e.printStackTrace();
            System.exit(1);
        }
        return null;
    }

UiFonts.java

    public static Font Nunito;

    public static void init() {
        Nunito = CustomFont("Fonts/Nunito/Nunito-BlackItalic.ttf");
    }

这是我的资源文件夹: My project file and folder

它总是根据路径向我显示错误。

示例:无法读取字体文件数据。

解决方案

我需要在Font 之前添加/,如下所示:

Nunito = CustomFont("/Fonts/Nunito/Nunito-BlackItalic.ttf");

我的资源文件夹也不在我的 java 文件夹中。现在它看起来像这样: Solution project file and code

【问题讨论】:

  • “示例:无法读取字体文件数据。” 总是复制/粘贴错误和异常输出!顺便说一句 - 如果左边的树一直扩展到Nunito-BlackItalic.ttf,它会更有用。你能创建一个新的截图吗?右边的代码是无关紧要的,所以将树的宽度根据需要扩展。
  • static 方法中使用Font.createFont(Font.TRUETYPE_FONT, Launcher.class.getResourceAsStream(path)); 通常会导致系统类加载器不适用于应用程序资源。最好创建一个应用程序类之一的对象,然后调用obj.getClass().getResource(path)。使用getResource(path) 获得URL 通常也更简单、更有用。

标签: java swing fonts embedded-resource


【解决方案1】:

您可能希望阅读 Java 中的 Accessing Resources

你需要前导 / 表示你的类路径的根以及 resource 包名。

Nunito = CustomFont("/resources/Fonts/Nunito/Nunito-BlackItalic.ttf");

话虽如此,我不知道你在哪里上课,很奇怪你的 resources 文件夹/包与你的 java 是分开的,通常它们会在同一个文件夹中,只是在不同的包中。

【讨论】:

  • 不,我仍然收到 java.io.IOException:读取字体数据时出现问题。
  • 是的,正如我所说,您的应用程序结构似乎有点奇怪......您的字体是嵌入在 jar 文件本身中还是它是 jar 文件旁边的文件夹
  • 这真的解决了您的问题吗?如果没有,则不需要将其标记为已解决。另外,我的最后一条评论是为了提供更多信息
  • 我看到了你的更新。资源文件夹应该进一步嵌套在 packages com -> your package name -> resources 中。然后你可以在我的回答中访问它
猜你喜欢
  • 2014-12-27
  • 2022-01-14
  • 2013-03-22
  • 2015-10-29
  • 2014-02-08
  • 2018-06-03
  • 2015-09-07
  • 1970-01-01
相关资源
最近更新 更多