sun.awt.X11FontManager:java.lang.reflect.InvocationTargetException(Arch Linux)

问题描述 投票:0回答:1

我有一个自助服务终端程序,可以在屏幕上写一些文本。在我的Ubuntu 18笔记本电脑和运行Raspbian的Raspberry Pi 3b上,它运行良好。为了最小化开销,我在仅运行X.org(+ xterm)的Raspberry Pi 3b上使用Arch Linux启动程序。但是它失败了,没有任何可用的信息:

java.io.IOException:读取字体数据时有问题。在java.desktop / java.awt.Font.createFont0(Font.java:1177)在java.desktop / java.awt.Font.createFont(Font.java:1046)在code.Frame(Frame.java:146)在code.Main.main(Main.java:58)

机器正在运行jre-openjdk 13,并且从JAR加载了字体。

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

基本结构是:

  • 代码
    • 主要
    • 框架
  • 资源
    • roboto_bold.ttf

这是我的代码:

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

知道这个问题是什么或如何调试它?

UPDATE:

我已经开始使用IntelliJ远程调试呼叫。这样我就可以创建一个堆栈跟踪:

java.lang.reflect.InvocationTargetException在java.base / jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(本地方法)在java.base / jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)在java.base / jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)在java.base / java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)在java.base / java.lang.reflect.Constructor.newInstance(Constructor.java:481)在java.desktop / sun.font.FontManagerFactory $ 1.run(FontManagerFactory.java:84)在java.base / java.security.AccessController.doPrivileged(AccessController.java:312)在java.desktop / sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:74)在java.desktop / java.awt.Font.createFont0(Font.java:1139)在java.desktop / java.awt.Font.createFont(Font.java:1046)在code.Frame(Frame.java:146)在code.Main.main(Main.java:58)

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

java fonts dependencies awt archlinux-arm
1个回答
0
投票

您需要一个类似的结构:

src:
   com.company
     Main.java
   resources
     roboto_bold.ttf
© www.soinside.com 2019 - 2024. All rights reserved.