JavaFX无需按钮自动切换场景出现ClassCastException异常如何解决
错误原因
- 类型转换逻辑错误:
PauseTransition的onFinished事件触发源是动画实例本身,不属于javafx.scene.Node类型,你代码中(Node) event.getSource()的强转逻辑不成立,这就是ClassCastException异常和IntelliJ提示的根本原因。 - 变量作用域错误:你在try代码块内声明的
Parent root是局部变量,仅在try块范围内有效,类的成员变量root始终没有被赋值,后续创建Scene时会触发空指针异常。
修正方案
直接使用FXML中已经注入的界面节点pane来获取当前窗口Stage即可,修正后代码如下:
@Override public void initialize(URL url, ResourceBundle resourceBundle) { PauseTransition pauseTransition = new PauseTransition(Duration.seconds(1.5)); pauseTransition.setOnFinished(event -> { try { // 给类成员变量root赋值,不要重新声明局部变量 root = FXMLLoader.load(getClass().getResource("p1GameScene.fxml")); // 用已注入的界面节点获取Stage stage = (Stage) pane.getScene().getWindow(); scene = new Scene(root); stage.setScene(scene); stage.show(); } catch (IOException e) { e.printStackTrace(); } }); pauseTransition.play(); }
内容的提问来源于stack exchange,提问作者Dan J
相关产品推荐
相关产品推荐

