Я занимаюсь разработкой простого шутера сверху вниз, я сталкиваюсь с проблемой, когда каждый раз, когда я sh использую собственный шрифт, я не могу этого сделать из-за ошибки java.lang.NullPointerException
at com.sun.javafx.scene.control.skin.Utils.computeTextWidth
. Я новичок и в Stack Overflow, и в JavaFX, поэтому, пожалуйста, не стесняйтесь что-либо исправлять.
Я точно знаю, что проблема не в пути к файлу, так как я могу правильно указать путь к фоновой музыке c что я использую также в игре, используя аналогичный private MediaPlayer bgm = new MediaPlayer(new Media(ClassLoader.getSystemResource(Resources.AUD_BGM).toExternalForm()));
.
Вот код и трассировка стека.
Код, где происходит метод
public GamePane() {
this.setBackground(new Background(new BackgroundFill(Color.rgb(8, 8, 8), null, null)));
scoreLabel = new Label();
scoreLabel.setMinWidth(Dimensions.SCREEN_WIDTH);
scoreLabel.setFont(Font.loadFont(ClassLoader.getSystemResource(Resources.FONT).toExternalForm(),
Dimensions.FONT_SIZE_NORMAL));
scoreLabel.setTextFill(Color.WHITE);
scoreLabel.setAlignment(Pos.TOP_RIGHT);
scoreLabel.setTextAlignment(TextAlignment.RIGHT);
scoreLabel.setTranslateY(Dimensions.HEALTH_BAR_SIZE + 2);
highScoreLabel = new Label();
//TODO: Resolve NPE error
//highScoreLabel.setFont(Font.loadFont(ClassLoader.getSystemResource(Resources.FONT).toExternalForm(),
//Dimensions.FONT_SIZE_NORMAL));
highScoreLabel.setTextFill(Color.WHITE);
highScoreLabel.setTranslateY(Dimensions.HEALTH_BAR_SIZE + 2);
healthBar = new Rectangle(Dimensions.SCREEN_WIDTH, Dimensions.HEALTH_BAR_SIZE, Color.WHITE);
healthBar.setX(0);
healthBar.setY(0);
this.getChildren().addAll(highScoreLabel, scoreLabel, healthBar);
}
Трассировка стека
"C:\Program Files\Java\jdk1.8.0_221\bin\java.exe" "-javaagent:C:\Users\Asledorf Morvant\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\193.5662.53\lib\idea_rt.jar=63297:C:\Users\Asledorf Morvant\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\193.5662.53\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_221\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\rt.jar;C:\Users\Asledorf Morvant\Desktop\piupiu-master\out\production\piupiu-master;C:\Users\Asledorf Morvant\.m2\repository\org\jetbrains\annotations\17.0.0\annotations-17.0.0.jar" me.zx96.piupiu.Main
Exception in Application start method
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: Exception in Application start method
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$1(LauncherImpl.java:182)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NullPointerException
at com.sun.javafx.scene.control.skin.Utils.computeTextWidth(Utils.java:119)
at com.sun.javafx.scene.control.skin.LabeledSkinBase.computePrefWidth(LabeledSkinBase.java:734)
at javafx.scene.control.Control.computePrefWidth(Control.java:537)
at javafx.scene.Parent.prefWidth(Parent.java:915)
at javafx.scene.layout.Region.prefWidth(Region.java:1419)
at javafx.scene.Node.autosize(Node.java:2886)
at javafx.scene.Parent.layoutChildren(Parent.java:1116)
at javafx.scene.Parent.layout(Parent.java:1087)
at javafx.scene.Scene.doLayoutPass(Scene.java:552)
at javafx.scene.Scene.preferredSize(Scene.java:1646)
at javafx.scene.Scene.impl_preferredSize(Scene.java:1720)
at javafx.stage.Window$9.invalidated(Window.java:864)
at javafx.beans.property.BooleanPropertyBase.markInvalid(BooleanPropertyBase.java:109)
at javafx.beans.property.BooleanPropertyBase.set(BooleanPropertyBase.java:144)
at javafx.stage.Window.setShowing(Window.java:940)
at javafx.stage.Window.show(Window.java:955)
at javafx.stage.Stage.show(Stage.java:259)
at me.zx96.piupiu.Main.start(Main.java:33)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$8(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$7(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$5(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$6(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$3(WinApplication.java:177)
... 1 more
У меня есть подозрение, что это как-то связано с тем, что он находится в конструкторе, но в основном это спекуляция:)