无法切换场景,因为舞台为空

Posted

技术标签:

【中文标题】无法切换场景,因为舞台为空【英文标题】:Cannot switch scenes because stage is null 【发布时间】:2018-04-08 01:44:05 【问题描述】:

我正在尝试在不创建新窗口的情况下切换场景。但是,我初始化并设置为等于 JavaFX 提供的默认 primaryStage 的阶段似乎在 start 方法之外等于 null。

代码如下:

public static void main(String[] args) 
    launch(args);



@Override
public void start(Stage primaryStage) throws Exception

    window = primaryStage;
    Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
    window.setTitle("Hello World");
    window.setScene(new Scene(root, 1000, 1000));
    window.show();
    System.out.println(window + "start");






public void regEvent()

    System.out.println(window);
   startGame(4,4);


private void startGame(int width, int height)

    System.out.println(window);
    board = new Tile[width][height];

    grid = new GridPane();
    grid.setPadding(new Insets(10,10,10,10));
    //individual cell spacing
    grid.setVgap(10);
    grid.setHgap(10);

    for(int x = 0; x< width; x++)
    
        for(int y = 0; y< height; y++)
        
            board[x][y] = new Tile(x,y);
            board[x][y].setText(x + " , " + y);
            GridPane.setConstraints(board[x][y], x, y);
            grid.getChildren().add(board[x][y]);
        
    
    Scene scene = new Scene(grid,1000,1000);
    window.setScene(scene);
    window.show();

当我在 startGame 方法中说“window.setScene(scene)”时,会抛出空指针异常。我知道是 window Stage 造成的,因为 startGame 开头的 println-ing 窗口返回 null。

这对我来说毫无意义,因为我在这个类的开头初始化了 window,并在 startGame 甚至通过 start 方法调用之前给了它一个值。

谁能告诉我如何切换场景保持相同的舞台?这就是我想做的。

谢谢大家!

【问题讨论】:

您似乎从regEvent() 调用startGame(),但您从哪里调用regEvent() 你在哪里声明window?如果我们看不到所有相关代码,我们真的无能为力。 James_D,regEvent() 是从在 SceneBuilder 中设置的 FXML 文件调用的。单击按钮时会发生这种情况 MMAdams,window 在我的代码开头声明,在 main() 方法上方。我的错误是不包括在内。 【参考方案1】:

我刚刚回答了你在这里遇到的同样的问题:

JavaFX Window Changer using FXML

【讨论】:

以上是关于无法切换场景,因为舞台为空的主要内容,如果未能解决你的问题,请参考以下文章

如何在javafx中制作透明的场景和舞台?

舞美设计在舞台中应用的重要性

java 按Esc键退出FX舞台或场景

检查电影剪辑的一部分何时离开舞台

数字舞台艺术拥有更加震撼的沉浸式体验

数字舞台艺术拥有更加震撼的沉浸式体验