为什么 GraphicsEnvironment 是无头的?
Why is GraphicsEnvironment headless?
我正在尝试使用此方法注册 .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”,同时在当前项目中它是一个 HeadlessGraphicsEnvironment(这可能是问题所在?)。
更新:对于 old/new 项目,我指的是我正在修改的两个独立的 Minecraft 版本(1.12.2 和 1.16.4),我 运行 在 win 10 机器上调试在 Intellij Idea 上并在两个项目中使用 JDK 1.8。
请 运行 您的 java 流程
java -Djava.awt.headless=true ...
也尝试将您的字体添加到 JVM 的字体文件夹中。如果这很好用,你可以试试这个
Why does GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts() give different results when ssh'ed in?
我解决了这个问题,其中有一个静态块:
System.setProperty("java.awt.headless", "true");
正如@rmunge 所说,解决方案是找到它并将其设置为 false。
System.setProperty("java.awt.headless", "false");
我正在尝试使用此方法注册 .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”,同时在当前项目中它是一个 HeadlessGraphicsEnvironment(这可能是问题所在?)。
更新:对于 old/new 项目,我指的是我正在修改的两个独立的 Minecraft 版本(1.12.2 和 1.16.4),我 运行 在 win 10 机器上调试在 Intellij Idea 上并在两个项目中使用 JDK 1.8。
请 运行 您的 java 流程
java -Djava.awt.headless=true ...
也尝试将您的字体添加到 JVM 的字体文件夹中。如果这很好用,你可以试试这个 Why does GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts() give different results when ssh'ed in?
我解决了这个问题,其中有一个静态块:
System.setProperty("java.awt.headless", "true");
正如@rmunge 所说,解决方案是找到它并将其设置为 false。
System.setProperty("java.awt.headless", "false");