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

标签 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 文件。如果这是一个简单的修复 - 太棒了!抱歉我是个菜鸟。

最佳答案

我们尝试以下其中一项:

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));

关于java - 尝试将 FXML 文件加载到定制的 JavaFX Game 类(由教授制作),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34147761/

相关文章:

JavaFX 警报截断消息?

javascript - 基于 web 的 javascript 游戏中的资源文件

c# - 在运行时更改对象类型,维护功能

java - ffmpeg 在 java 退出之前不会启动

java - 无法解析导入 javax.xml.parsers.ParserConfigurationException

java - 从另一个 JFrame 遍历时,Key Listener 在 JFrame 中不起作用

java - 如何在窗口重新缩放期间保持 JavaFx 工具栏的顶部对齐?

java - 将选定的文件复制到项目目录

java - Java 中的 toArray 与 stream.toArray 有什么性能差异吗

java - 有什么方法可以从协调器(非父)pom 指定模块属性吗?