JavaFX: вычислить ширину текста: ошибка NullPointerException - PullRequest
0 голосов
/ 09 марта 2020

Я занимаюсь разработкой простого шутера сверху вниз, я сталкиваюсь с проблемой, когда каждый раз, когда я 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

У меня есть подозрение, что это как-то связано с тем, что он находится в конструкторе, но в основном это спекуляция:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...