【发布时间】:2021-06-04 13:16:32
【问题描述】:
是否可以使用 .jar 文件中的 .ttf 文件创建自定义字体? 我已经创建了一个具有以下结构的 jar 文件
Game.jar
├──Snake
│ ├── lib
│ | └── game_over.ttf
| ├── src
│ | ├── GameFrame.class
│ | ├── GamePanel.class
│ | └── SnakeGame.class
我试图通过这样做来获取自定义字体
Font GAMEOVER_FONT;
InputStream is = this.getClass().getClassLoader().getResourceAsStream("Snake/lib/game_over.ttf");
GAMEOVER_FONT = Font.createFont(Font.TRUETYPE_FONT, is).deriveFont(200f);
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, is));
g.setFont(GAMEOVER_FONT);
我做错了什么?是否有可能实现我正在尝试的目标?
【问题讨论】:
-
安德烈,也许这只是你创建问题时的问题,但是你的jar中的字体名称是
game_over.tff。请注意错字,应该是'ttf'。然后使用@cello 中的代码——基本上,在路径中包含Snake之前的/,并去掉第二个Font.createFont方法调用,使用ge.registerFont(GAMEOVER_FONT),它应该可以正常工作, -
是的,扩展是正确的问题是一个错字
-
感谢您的澄清。而且,大提琴的代码不起作用?确实应该如此。请问,如果你运行它有什么问题?
nullInputStream? -
我检查了 if (is == null) 并且当我运行 jar 时我得到了
java.io.IOException: Problem reading font data. -
拜托,在你的用例中应该是一样的,但是,你能试试
this.getClass().getResourceAsStream()而不是this.getClass().getClassLoader().getResourceAsStream()吗?注意getClassLoader().的区别。另外,请将字体放在您的类中,您的 Java 输出目录中,并尝试从那里读取它,以检查字体是否存在实际问题。