当我想使用字体时,我发现了一种奇怪的行为,它包含在跳板脂肪罐中。在从/resources目录加载字体的本地机器上运行测试时,它工作得很好。但是,如果我用maven构建了一个应用程序并从终端运行它,那么我将收到如下消息:
java.io.IOException: Problem reading font data.
at java.awt.Font.createFont0(Font.java:1000)
at java.awt.Font.createFont(Font.java:877)我试图找到一个解决办法,并做了以下工作:
/usr/share/fonts/truetype/europlatefc-cache -f -v
方法:
public Font getFont() throws IOException, FontFormatException {
File f = File.createTempFile("dang", "tmp");
assert f != null;
f.delete();
ClassLoader classLoader = getClass().getClassLoader();
Font font = Font.createFont(Font.TRUETYPE_FONT, classLoader.getSystemResourceAsStream("EuroPlate.ttf"));
font.deriveFont(105f);
System.out.println(font.getFontName());
return font;
}编辑: IDE运行应用程序-> works
终端运行应用程序->失败
堆栈跟踪:
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 components.NumberPlateUtility.getFont(NumberPlateUtility.java:81)
at components.NumberPlateUtility.completeImage(NumberPlateUtility.java:173)
at main.NumberplateClientCommands.one(NumberplateClientCommands.java:63)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:223)
at org.springframework.shell.Shell.evaluate(Shell.java:169)
at org.springframework.shell.Shell.run(Shell.java:134)
at org.springframework.shell.jline.InteractiveShellApplicationRunner.run(InteractiveShellApplicationRunner.java:84)
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:783)
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:773)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1242)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1230)
at main.Main.main(Main.java:20)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)存储库:generator.git
发布于 2019-07-11 10:42:12
此代码将起作用:
public Font getFont() throws IOException, FontFormatException {
File f = File.createTempFile("dang", "tmp");
assert f != null;
f.delete();
ClassLoader classLoader = getClass().getClassLoader();
Font font = Font.createFont(Font.TRUETYPE_FONT, classLoader.getResourceAsStream("EuroPlate.ttf"));
font.deriveFont(105f);
System.out.println(font.getFontName());
return font;
}注意classLoader.getResourceAsStream中的变化。请查看此answer以获得更多解释。
https://stackoverflow.com/questions/56983460
复制相似问题