Java-如何从资源文件夹加载自定义字体
我正在使用JavaSwing创建一个应用程序,但我也一直在尝试加载一些字体! 问题是: 我有一个带有自定义字体的资源文件夹,当我尝试使用以下代码加载它们时: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
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
通常更简单、更有用。