在JavaFX 2.2中阻止/取消关闭主要阶段

Jom*_*oos 24 java javafx-2

正如标题所说,我的问题是,如何防止/取消JavaFX 2.2中初级阶段的关闭?我在Google上做了一些研究,以下两个链接似乎解决了这个问题:

我尝试了这两个链接解释的方法,但遗憾的是,对我来说,它们都不起作用.所以,不用多说,这就是我所做的.

首先,我想一个连接OnCloseRequestprimaryStage如下.

primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
    @Override
    public void handle(WindowEvent event) {
        if (!canExit()) {
            event.consume();
            primaryStage.show(); // I tried without this line also.
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

canExit()回报false,我试图阻止进一步传播事件,并导致调用退出应用程序event.consume().但是阶段正在关闭/隐藏,我在Netbeans输出窗口中收到以下错误消息.它不断反复出现,直到我强行关闭Netbeans的应用程序.

(java:6731): Gtk-CRITICAL **: IA__gtk_widget_get_visible: assertion `GTK_IS_WIDGET (widget)' failed

(java:6731): Gtk-CRITICAL **: IA__gtk_widget_get_visible: assertion `GTK_IS_WIDGET (widget)' failed

(java:6731): Gtk-CRITICAL **: IA__gtk_widget_get_visible: assertion `GTK_IS_WIDGET (widget)' failed
Run Code Online (Sandbox Code Playgroud)

尝到失败的这种尝试,我改变了OnCloseRequestOnHiding成功的期望.

primaryStage.setOnHiding(new EventHandler<WindowEvent>() {
    @Override
    public void handle(WindowEvent event) {
        if (!canExit()) {
            event.consume();
            primaryStage.show(); // I tried without this line also.
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

虽然,我尝试过尝试失败,但我认为我已经取得了一些进展.这次没有错误消息,也不需要强制关闭Netbeans的应用程序.

然后我读到setImplicitExit()Platform类中命名的一些魔法.认为这是我所缺少的,我尝试Platform.setImplicitExit(false);了以下两种方法:

  1. OnCloseRequest

    Platform.setImplicitExit(false);
    
    primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
        if (!canExit()) {
            // ...
        } else {
            Platform.exit();
        }
    });
    
    Run Code Online (Sandbox Code Playgroud)

    没有区别,舞台被关闭/隐藏,并且重复出现相同的错误消息.

  2. OnHiding

    Platform.setImplicitExit(false);
    
    primaryStage.setOnHiding(new EventHandler<WindowEvent>() {
        if (!canExit()) {
            // ...
        } else {
            Platform.exit();
        }
    });
    
    Run Code Online (Sandbox Code Playgroud)

    从积极的方面开始,应用程序不会像以前那样退出.但是,负面的注意事项是舞台仍在关闭/隐藏.

现在,我的军械库中没有武器/装备来解决它,所以我在这里请求你的英雄和冠军的帮助.那么,我怎样才能解决这个问题,或者我做错了什么或者我错过了什么?

Shr*_*ave 27

我在我的应用程序中使用了以下代码,它运行正常,

Platform.setImplicitExit(false);

primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
    @Override
    public void handle(WindowEvent event) {
        event.consume();
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 我尝试了相同的窗口隐藏/关闭和错误(`(java:3187):Gtk-CRITICAL**:IA__gtk_widget_get_visible:断言'GTK_IS_WIDGET(小部件)'失败')连续出现在控制台/终端上,直到我强制退出该应用程序. (2认同)

tom*_*tom 3

我认为你的onCloseRequest()概念是错误的。如果您消费了该活动,您就取消了关闭!所以它的工作方式相反,如果canExit()返回 false 你就消耗了该事件