我正在尝试使用以下方法注册.ttf字体:
private void addFont(String name) {
try {
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
File file = new File("D:/Client/assets/fonts/"+ name);
Font font = Font.createFont(Font.TRUETYPE_FONT, file);
ge.registerFont(font);
} catch (FontFormatException | IOException e) {
e.printStackTrace();
}
}
问题是字体无法创建,我得到的只是: java.awt.FontFormatException: java.nio.BufferUnderflowException
同样的代码在以前的一个项目中工作,通过断点调试我发现 ge
是一个“win32graphicsenvironment”,同时在当前项目中是一个无头graphicsenvironment(这可能是问题吗?)。
upadate:对于新旧项目,我指的是我正在修改的两个独立的minecraft版本(1.12.2和1.16.4),我在win10机器上运行,在intellijidea上调试,并在两个项目中使用jdk1.8。
2条答案
按热度按时间k7fdbhmy1#
请使用运行java进程
java -Djava.awt.headless=true ...
还可以尝试将字体添加到jvm的字体文件夹中。如果这很好,你可以试试这个为什么graphicsenvironment.getlocalgraphicsenvironment().getallfonts()在ssh中会给出不同的结果?8dtrkrch2#
我解决了这个问题,有一个静态块:
正如@rmunge所说的,解决方法就是找到它并将其设置为false。