所以我尝试使用名为 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 <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="294a4644074d455a4a07595b4c4f4c5b4c474a4c5a4f51691818071e0719" rel="noreferrer noopener nofollow">[email protected]</a>/com.dlsc.preferencesfx.view.UndoRedoBox.<init>(UndoRedoBox.java:17)
at <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="3d5e52501359514e5e134d4f585b584f58535e584e5b457d0c0c130a130d" rel="noreferrer noopener nofollow">[email protected]</a>/com.dlsc.preferencesfx.PreferencesFx.init(PreferencesFx.java:71)
at <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2b484446054f475848055b594e4d4e594e45484e584d536b1a1a051c051b" rel="noreferrer noopener nofollow">[email protected]</a>/com.dlsc.preferencesfx.PreferencesFx.<init>(PreferencesFx.java:64)
at <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4625292b68222a3525683634232023342328252335203e06777768716876" rel="noreferrer noopener nofollow">[email protected]</a>/com.dlsc.preferencesfx.PreferencesFx.<init>(PreferencesFx.java:55)
at <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="690a0604470d051a0a47191b0c0f0c1b0c070a0c1a0f11295858475e4759" rel="noreferrer noopener nofollow">[email protected]</a>/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 中。
有什么想法为什么 getResource()
返回 null
吗?我向开发者报告了这个问题,但似乎 FontAwesomeFX 库已被放弃。
我正在 Mac OS X Big Sur 上使用最新的 IntelliJ 运行此程序。
最佳答案
通过更改以下行,我成功修补了库(在阅读 this 后)。
Font.loadFont(GlyphsFactory.class.getResource(pathToIconFont).openStream(), 10.0D);
对此。
Font.loadFont(GlyphsFactory.class.getResourceAsStream(pathToIconFont), 10.0D);
关于java - getResource() 方法在加载字体文件时返回 null,但为什么呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65374578/