getResource() 方法在加载字体文件时返回 null,但为什么呢?

时间:2020-12-19 21:20:23

标签: java javafx font-awesome

所以我尝试使用名为 PreferencesFX 的库,它使用 FontAwesomeFX 引发以下错误。

java.lang.reflect.InvocationTargetException
    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:567)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
    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:567)
    at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
Caused by: java.lang.RuntimeException: java.lang.NullPointerException
    at de.jensd.fx.fontawesomefx.commons/de.jensd.fx.glyphs.GlyphsFactory.loadFont(GlyphsFactory.java:64)
    at de.jensd.fx.fontawesomefx.commons/de.jensd.fx.glyphs.GlyphsFactory.<init>(GlyphsFactory.java:38)
    at de.jensd.fx.fontawesomefx.fontawesome/de.jensd.fx.glyphs.fontawesome.utils.FontAwesomeIconFactory.<init>(FontAwesomeIconFactory.java:28)
    at de.jensd.fx.fontawesomefx.fontawesome/de.jensd.fx.glyphs.fontawesome.utils.FontAwesomeIconFactory.get(FontAwesomeIconFactory.java:33)
    at com.dlsc.preferencesfx@11.7.0/com.dlsc.preferencesfx.view.UndoRedoBox.<init>(UndoRedoBox.java:17)
    at com.dlsc.preferencesfx@11.7.0/com.dlsc.preferencesfx.PreferencesFx.init(PreferencesFx.java:71)
    at com.dlsc.preferencesfx@11.7.0/com.dlsc.preferencesfx.PreferencesFx.<init>(PreferencesFx.java:64)
    at com.dlsc.preferencesfx@11.7.0/com.dlsc.preferencesfx.PreferencesFx.<init>(PreferencesFx.java:55)
    at com.dlsc.preferencesfx@11.7.0/com.dlsc.preferencesfx.PreferencesFx.of(PreferencesFx.java:102)
    at my.package.tryThis(Clusters.java:38)
    at my.package.Main.main(Main.java:17)
    ... 11 more
Caused by: java.lang.NullPointerException
    at de.jensd.fx.fontawesomefx.commons/de.jensd.fx.glyphs.GlyphsFactory.loadFont(GlyphsFactory.java:62)
    ... 21 more
Exception running application my.package.Main

我发现问题的原因在于 line 62 of the Glyphs Factory class,但我不知道如何解决它。

方法GlyphsFactory.class.getResource(pathToIconFont)返回null,而不是返回字体文件。我可以看到该方法正在通过路径 /de/jensd/fx/glyphs/fontawesome/fontawesome-webfont.ttf 加载字体文件(这似乎是正确的)。我可以看到字体从 de.jensd.fx.glyphs.fontawesome 包加载到 de.jensd.fx.glyphs 包,但两个包都在不同的 jar 中。

IntelliJ Screenshot

知道 getResource() 返回 null 的原因吗?我向开发人员报告了它,但似乎放弃了 FontAwesomeFX 库。

我正在 Mac OS X Big Sur 上使用最新的 IntelliJ 运行它。

1 个答案:

答案 0 :(得分:3)

通过更改以下行,我成功地修补了库(在阅读了 this 之后)。

Font.loadFont(GlyphsFactory.class.getResource(pathToIconFont).openStream(), 10.0D);

为此。

Font.loadFont(GlyphsFactory.class.getResourceAsStream(pathToIconFont), 10.0D);