在舞台javafx上调用hide方法时,hide方法将抛出NullPointerException

时间:2019-05-31 10:50:12

标签: java javafx javafx-8 javafx-2

然后调用下面的方法来显示和隐藏窗口/舞台。 第一次单击时,该窗口可见,然后再次单击时,该窗口应隐藏。每次单击按钮时,窗口应在可见和不可见状态之间切换。

在initialize方法中,我已将isMyHomeVisible初始化为 false

但是,在我的情况下,在primaryStage上调用hide()的行会抛出 NullPointerException 。不知道为什么会这样。

public void onMyHomeButtonClicked() {

        if (!isMyHomeVisible) {


            try {
                root = FXMLLoader.load(getClass().getResource("Sample.fxml"));
                Scene scene = new Scene((Parent) root, 1400, 800);
                scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
                Stage primaryStage = new Stage();
                primaryStage.setScene(scene);
                primaryStage.setResizable(false);
                primaryStage.setHeight(910);
                primaryStage.setWidth(1335);
                primaryStage.getIcons().add(new Image(Main.class.getResourceAsStream("MyHome.png")));
                primaryStage.show();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


            isMyHomeVisible = true;



        } else {

            primaryStage.hide();
            isMyHomeVisible = false;

        }           

    }

不确定为什么会这样。在同一个控制器中,我还有另一种方法,可以使皮革按预期工作。以下是将皮革用作护身符的方法。

public void onSpaceTabButtonClicked() {

        if (!isSpaceTabVisible) {

            try {
                root = FXMLLoader.load(getClass().getResource("SpaceTab.fxml"));
                scene = new Scene((Parent) root, 1400, 800);
                scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
                scene.setFill(Color.TRANSPARENT);
                primaryStage = new Stage();
                primaryStage.setScene(scene);
                primaryStage.setResizable(false);
                primaryStage.setHeight(309);
                primaryStage.setWidth(760);
                primaryStage.getIcons().add(new Image(Main.class.getResourceAsStream("DX-logo1.png")));
                primaryStage.initStyle(StageStyle.UNDECORATED);
                primaryStage.initStyle(StageStyle.TRANSPARENT);
                primaryStage.show();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            // to be able to move the new undecorated window

            scene.setOnMousePressed(new EventHandler<MouseEvent>() {

                @Override
                public void handle(MouseEvent event) {
                    xOffset = event.getSceneX();
                    yOffset = event.getSceneY();

                }
            });

            scene.setOnMouseDragged(new EventHandler<MouseEvent>() {

                @Override
                public void handle(MouseEvent event) {
                    primaryStage.setX(event.getScreenX() - xOffset);
                    primaryStage.setY(event.getScreenY() - yOffset);

                }
            });

            isSpaceTabVisible = true;


        } else {
            primaryStage.hide();
            isSpaceTabVisible = false;

        }




    }

0 个答案:

没有答案