Java-如何从资源文件夹加载自定义字体

Java-如何从资源文件夹加载自定义字体,java,swing,fonts,embedded-resource,Java,Swing,Fonts,Embedded Resource,我正在使用JavaSwing创建一个应用程序,但我也一直在尝试加载一些字体! 问题是: 我有一个带有自定义字体的资源文件夹,当我尝试使用以下代码加载它们时: public static Font CustomFont(String path) { Font customFont = loadFont(path, 24f); System.out.println(customFont == null); GraphicsEnvironment

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

    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");
    }
这是我的资源文件夹:

它总是根据路径显示错误

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

解决方案 我需要在
字体之前添加
/
,如下所示:

Nunito=CustomFont(“/Fonts/Nunito/Nunito BlackItalic.ttf”)

另外,我的资源文件夹不在我的java文件夹中。现在看起来是这样的:

您可能需要用Java进行阅读

您需要前导/表示类路径的根以及资源包名称

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

话虽如此,我还是说不出你的类在哪里,很奇怪你的资源文件夹/包与java是分开的,通常它们会在同一个文件夹中,只是在不同的包中。

不,我仍然得到java.io.IOException:字体数据读取有问题。是的,正如我所说,你的应用程序结构似乎有点奇怪。。。您的字体是嵌入在jar文件本身中,还是与jar文件一起的文件夹呢?谢谢,这真的解决了您的问题吗?如果没有,则不需要将其标记为已解决。另外,我最后的评论是想问更多的信息,我看到了你的更新。资源文件夹应该进一步嵌套在packages com->your package name->resources中。然后,您可以在我的回答“示例:无法读取字体文件数据”中访问它。始终复制/粘贴错误和异常输出!顺便说一句,如果把左边的树一直扩展到
Nunito BlackItalic.ttf
,它会更有用。你能创建一个新的屏幕截图吗?右边的代码是无关的,所以根据需要扩展树的宽度
方法中的code>通常会导致系统类加载器,该加载器不用于应用程序资源。最好为应用程序的某个类创建一个对象,然后调用
obj.getClass().getResource(path)
。使用
getResource(path)
获取
URL
通常更简单、更有用。