首页 > 解决方案 > JavaFX:单击按钮打开第二个阶段/窗口时出错(使用 fxml)

问题描述

我创建了一个游戏,启动时会显示一个开始页面/窗口,其中包含退出或开始游戏的选项。单击开始按钮时应打开第二个窗口,但出现以下错误:

Exception in thread "JavaFX Application Thread" java.lang.NullPointerException: Root cannot be null

我已经阅读了这个错误,但似乎没有任何建议有效。这是我使用 start 方法的主要课程:

package game;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

import java.io.File;
import java.net.URL;

public class AdventureGame extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception{
        primaryStage.setTitle("EBRUTATEN - The Curse of Methuselah");
        URL url = new File("F:\\[0] Programming 3.1\\[0] CAPSTONE ASSIGNMENT\\[0] Current Working File\\MyJavaFXGame2\\src\\fxml\\sample.fxml").toURI().toURL();
        Parent root = FXMLLoader.load(url);
        Scene scene = new Scene(root);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String...args) {
        launch(args);
    }
}

这是其控制器类中处理按钮操作的开始按钮方法

    public void startButClicked() {
        startBut.setOnAction(event -> {
            Parent gameOutput = null;
            try {
                URL url = new File("F:\\[0] Programming 3.1\\[0] CAPSTONE ASSIGNMENT\\[0] Current Working File\\MyJavaFXGame2\\src\\fxml\\game.fxml").toURI().toURL();
                gameOutput = FXMLLoader.load(url);
            } catch (IOException e) {
                e.printStackTrace();
            }
            Scene gameView = new Scene(gameOutput);
            Stage secStage = (Stage) ((Node) event.getSource()).getScene().getWindow();
            secStage.setScene(gameView);
            secStage.show();
            mediaPlayerStarterMusic.stop();
        });
    }

任何意见,将不胜感激。

标签: javafxfxml

解决方案


推荐阅读