为什么graphicsenvironment是无头的?

iezvtpos  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(370)

我正在尝试使用以下方法注册.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。

k7fdbhmy

k7fdbhmy1#

请使用运行java进程 java -Djava.awt.headless=true ... 还可以尝试将字体添加到jvm的字体文件夹中。如果这很好,你可以试试这个为什么graphicsenvironment.getlocalgraphicsenvironment().getallfonts()在ssh中会给出不同的结果?

8dtrkrch

8dtrkrch2#

我解决了这个问题,有一个静态块:

System.setProperty("java.awt.headless", "true");

正如@rmunge所说的,解决方法就是找到它并将其设置为false。

System.setProperty("java.awt.headless", "false");

相关问题