试图将FXML文件加载到定制的JavaFX Game类(由教授制作)

时间:2015-12-08 03:59:00

标签: java javafx runtime runtime-error fxml

我感到困惑,我不知道从哪个项目开始,明天就要到了。我们翻阅了JavaFX的一张幻灯片,他们为我们分配了一个项目 - 制作一个完整的游戏,Breakout或Space Invader。我希望我夸大其词。

这是我当前的问题:我正在尝试在我的Driver类中使用FXML文件,但是他提供给我们的Game类没有扩展Pane,这是我知道获取FXML资源的唯一方法。

以下是一些代码:

public class Driver extends Application {

@Override
public void start(Stage primaryStage) throws Exception {
    Game game = new Breakout(primaryStage);

    try {
        game = FXMLLoader.load(getClass().getResource("BreakoutFXML.fxml"));
    } catch (IOException e) {
        System.out.println(e);
        System.exit(1);
    } // try

    primaryStage.setTitle(game.getTitle());
    primaryStage.setScene(game.getScene());
    primaryStage.show();
    game.run();
} // start  

我收到此运行时错误:

Caused by: java.lang.ClassCastException: javafx.scene.layout.Pane cannot be cast to com.michaelcotterell.game.Game
    at cs1302.fxgame.Driver.start(Driver.java:19)  

意味着(我认为)我不能使用这种获取FXML文件的方法,所以我该怎么办?
这是link to his documentation for the Game class,应该会有所帮助。

我意识到这个问题已经被问了很多,但是除了标准的Pane / Scene类之外我还没有找到任何东西来获取FXML文件。如果这是一个简单的解决方案 - 太棒了!很抱歉这样的菜鸟。

1 个答案:

答案 0 :(得分:2)

试试其中一个:

Pane myPane = FXMLLoader.load(getClass().getResource("BreakoutFXML.fxml"));

// 1
game.getScene().getRoot().add(myPane);
// 2
game.getScene().setRoot(myPane);
// 3
game.getStage().setScene(new Scene(myPane));