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

标签 java fonts dependencies awt archlinux-arm

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

java.io.IOException: Problem reading font data.
at java.desktop/java.awt.Font.createFont0(Font.java:1177)
at java.desktop/java.awt.Font.createFont(Font.java:1046)
at code.Frame.(Frame.java:146)
at 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"))

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

更新:

我已开始使用 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.Frame.(Frame.java:146)
at code.Main.main(Main.java:58)

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

最佳答案

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

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

关于java - sun.awt.X11FontManager : java. lang.reflect.InitationTargetException (Arch Linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59557737/

相关文章:

node.js - 在 Node npm 上安装 URSA 时遇到问题

java - 使用Auditing时如何自定义Spring-Data注入(inject)的AuditingHandler?

php - 在 Magento 商店中更改字体

css - 在没有 htaccess/iis 的元素中使用自定义字体会导致 "Resource interpreted as Font but transferred with MIME type text/html"

javascript - 如何在每次刷新页面时为一行文本生成随机字体?

go - 如何在Go中依赖 fork 的第三方依赖关系

linux - 在 Kali (Debian) 中安装 mono-devel 时,软件包具有未满足的依赖关系

java - 在 java 中使用 keystore 存储 AES key

java - Ubuntu 64 位上的 Spring-boot - 无法启动

java - 无法登录 IBM WebSphere 管理控制台