错误“ javafx.scene.CssStyleHelpercalculateValue”是什么意思?

时间:2019-06-09 21:44:54

标签: javafx java-10

对于学校作业,我们必须编写一个小型蛇游戏。一切正常,但有时最终游戏屏幕不显示并吐出此错误:

2019年6月9日晚上11:25:27 javafx.scene.CssStyleHelper computeValue 警告:在样式表jrt中从规则'* .label'解析'-fx-text-fill'时无法解析'-fx-text-background-color',而在jrt:/javafx.controls/com/sun/javafx/scene中/control/skin/modena/modena.bss

这对我来说似乎很奇怪,因为它并不时常这样做,只是时不时地这样做。我的问题是此错误意味着什么,以及可能如何解决。我真的不能显示代码,因为我的学校对共享作业非常严格,但是我希望这是足够的信息,以便至少告诉我该错误的原因。

我在下面添加了一些示例,它可能无法准确复制,但是确实提供了一些有关我在做什么的想法。

另一条有用的信息可能是使用AnimationTimer不断更新DrawPane。

import controller.Controller;
import javafx.geometry.Pos;
import javafx.scene.control.Label;
import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundFill;
import javafx.scene.layout.FlowPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;

public class GameOverScene extends FlowPane {

    private Label timeAlive;

    // constructor
    public GameOverScene(Controller controller) {

        setAlignment(Pos.TOP_CENTER);
        setBackground(new Background(new BackgroundFill(Color.rgb(197, 0, 41), null, null)));

        VBox content = new VBox();
        content.setAlignment(Pos.TOP_CENTER);

        Label gameOverMessage = new Label("Game  Over");
        gameOverMessage.setFont(new Font("Arial", 40));

        timeAlive = new Label(controller.getTimerTime());
        timeAlive.setFont(new Font("Arial", 35));
        timeAlive.setTextFill(Color.WHITE);

        content.getChildren().addAll(gameOverMessage, timeAlive);
        getChildren().add(content);
    }

    public void setTimerTime(String time) {
        timeAlive.setText(time);
    }


}
    public class GameScene extends Scene {

    // variables
    private DrawPane drawPane;
    private BorderPane root;
    private DashBoard dashBoardPane;
    private GameOverScene gameOver;
    private Controller controller;


    // constructor
    public GameScene(double width, double height, Controller controller, Game game) {
        super(new Pane());

        this.controller = controller;

        root = new BorderPane();
        drawPane = new DrawPane(this, game);
        dashBoardPane = new DashBoard(controller);
        gameOver = new GameOverScene(controller);

        root.setCenter(drawPane);
        root.setBottom(dashBoardPane);
        setRoot(root);
}

    public void switchToGameOver() {
        gameOver.setTimerTime(controller.getTimerTime());
        setRoot(gameOver);

    }
}

0 个答案:

没有答案