【发布时间】: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