2016-03-12 62 views
0

点击右上角的关闭点,我有一个小问题关闭了辅助舞台。 我使用控制器类的fxml,我需要一种方法来处理这种情况。JavaFX辅助舞台onCloseRequest

这里是我做什么,但我得到一个空指针异常:

@Override 
    public void initialize(URL location, ResourceBundle resources) { 
     Stage stage = (Stage) tbTabPaneHome.getScene().getWindow(); 
     stage.setOnCloseRequest(e -> { 
      Platform.exit(); 
      System.exit(0); 
     }); 

    } 

由于舞台没有完全地intialized,所以任何其他的想法?

回答

2

由于SceneStage尚未创建,因此您不能调用它们,或者您已经提到了NPE。

在舞台上安装事件处理程序的一种方法是听取tbTabPaneHomesceneProperty()中的更改。

一旦节点被添加到场景中,该属性将为您提供Scene实例。

但现场未添加到Stage呢,所以你需要等到做到这一点,与Platform.runLater()

public void initialize() { 
    tbTabPaneHome.sceneProperty().addListener((obs, oldScene, newScene) -> { 
     Platform.runLater(() -> { 
      Stage stage = (Stage) newScene.getWindow(); 
      stage.setOnCloseRequest(e -> { 
       Platform.exit(); 
       System.exit(0); 
      }); 
     }); 
    }); 
}