sun.awt.X11FontManager: java.lang.reflect.InvocationTargetEx



我有一个信息亭程序,可以在屏幕上写入一些文本。它在我的 Ubuntu 18 笔记本电脑和运行 Raspbian 的 Raspberry Pi 3b 上运行良好。为了尽量减少开销,我在Raspberry Pi 3b上使用Arch Linux,仅运行 X.org(+xterm(来启动我的程序。但是在没有任何可用信息的情况下它会失败:

java.io.IOException:读取字体数据时出现问题。at java.desktop/java.awt.Font.createFont0(Font
.java:1177(at
java.desktop/java.awt.Font.createFont(Font.java:1046(
at code.框架。(帧.java:146(
在代码。主要(主要.java:58(

计算机正在运行jre-openjdk 13,字体从 JAR 加载。

我已经尝试将java.io.tmpdir更改为绝对可写的目录。我还将所有文件小写。

基本结构为:

  • 法典
    • 主要
    • 框架
  • 资源
    • roboto_bold.ttf

这是我的代码:

Font.createFont(Font.TRUETYPE_FONT, Main.class.getResourceAsStream("/resources/roboto_bold.ttf"))

知道问题是什么或我如何调试它吗?

更新:

我已开始使用 IntelliJ 远程调试呼叫。通过这种方式,我能够创建一个堆栈跟踪:

java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method(at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:



62(
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45(
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500(at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481(at java.desktop/sun.font.FontManagerFactory
$1.run(FontManagerFactory.java:84(at java.base/
java.security.AccessController.doPrivileged(AccessController.java:312(at java.desktop/

sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:74(
at java.desktop/java.awt.Font.createFont0(Font.java:1139(at
java.desktop/java.awt.Font.createFont(Font.java:1046(
at code.框架。(帧.java:146(
在代码。主要(主要.java:58(

我认为这意味着sun.awt.X11FontManager不存在。我不知道如何解决这个问题。似乎是一个依赖项问题,但已安装extra/fontconfig 2:2.13.91extra/freetype2 2.10.1

你需要一个这样的结构:

src:
com.company
Main.java
resources
roboto_bold.ttf

相关内容

  • 没有找到相关文章

最新更新