这是我的代码:
public static Font getFont() {
try {
InputStream is = Object.class.getResourceAsStream("/HARCOMAS.TTF");
return Font.createFont(Font.TRUETYPE_FONT, is);
} catch (FontFormatException | IOException ex) {
Logger.getLogger(StartPanel.class.getName()).log(Level.SEVERE, null, ex);
return null;
}
}
我的计算机上的版本是jdk 8,该程序可以运行,但是,当我使用jdk 11将程序复制到朋友计算机上时,发生了异常。
java.io.IOException: Problem reading font data.
at java.desktop/java.awt.Font.createFont0(Font.java:1183)
at java.desktop/java.awt.Font.createFont(Font.java:1052)
at client.utils.PanelUtil.getFont(PanelUtil.java:39)
at client.services.DrawGame.<init>(DrawGame.java:24)
at client.views.GamePanel.createPanel(GamePanel.java:31)
at client.views.GamePanel.<init>(GamePanel.java:24)
at client.views.PanelHolder.<clinit>(PanelHolder.java:12)
at client.views.MainFrame.main(MainFrame.java:29)
我不知道,字体文件在资源目录下。
尝试一下:
private void loadResources() throws FontFormatException, IOException {
Font fontRaw = Font.createFont(Font.TRUETYPE_FONT, new File("resources/fonts/slkscr.ttf"));
Font fontBase = fontRaw.deriveFont(28f);
this.font = new TrueTypeFont(fontBase, false);
}
更多参考资料:
也请尝试以下方法:
try {
GraphicsEnvironment ge =
GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, new File("A.ttf")));
} catch (IOException|FontFormatException e) {
//Handle exception
}