代码之家  ›  专栏  ›  技术社区  ›  fox

为什么我的静态Stage对象可以创建多个窗口?JavaFX

  •  0
  • fox  · 技术社区  · 2 年前

    在我的程序中,我有一些按钮可以打开一个单独的窗口,但当用户单击另一个按钮时,我希望最后一个阶段关闭,并打开另一个。我通过创建一个静态 Stage 在我的课堂上,如果按下按钮,它会用一个新的舞台替换舞台对象。

    然而,当我这样做时,它并没有像我想象的那样替换最后一个窗口,而是会打开一个新窗口,即使两个窗口都连接到同一个静态对象。

    现在只要做一件事就可以解决这个问题 stage.close(); 然而,在创建新窗口之前,我打开了我的任务管理器,当我发送垃圾邮件时,它开始积累内存,就好像这些窗口仍然存在于我的计算机上,但它们是隐藏的。发生什么事?我如何从记忆中抹去这个幻影阶段,为什么是一样的 阶段 对象是否能够创建多个阶段?

    这是一段代码,它重现了我的问题:

    private static Stage testStage = null;
    
    @Override
    public void start(Stage stage) {
    
        testStage = new Stage();
    
        Button openButton = new Button("open");
        openButton.setOnMouseClicked(event -> {
            this.start(null);
        });
    
        BorderPane root = new BorderPane();
        root.setCenter(openButton);
    
        scene = new Scene(root, 500, 500);
        testStage.setTitle("test");
        testStage.setScene(scene);
        testStage.show();
    }
    

    我也知道我没有使用stage参数,但这只是我在一个完全不同的类中所做的一个例子。

    0 回复  |  直到 2 年前