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为绝对可写的目录。我还小写了所有文件。

基本结构是:

  • 代码
    • 主要的
    • 框架
  • 资源
    • 机器人粗体.ttf

这是我的代码:

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

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

更新:

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


java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)的java.lang.reflect.InvocationTargetException
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)
at java.desktop/sun.font.FontManagerFactory$1.run(FontManagerFactory.java:84)
at 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安装。

4

1 回答 1

0

你需要一个像这样的结构:

src:
   com.company
     Main.java
   resources
     roboto_bold.ttf
于 2020-01-02T02:33:55.107 回答