Events 防止隐藏主对话框

Events 防止隐藏主对话框,events,event-handling,javafx,javafx-2,javafx-8,Events,Event Handling,Javafx,Javafx 2,Javafx 8,我试图阻止关闭我的应用程序,但在查看JavaFX文档(以及一些实现之后)时,我注意到只有当用户尝试使用close按钮或ALT+F4快捷方式关闭窗口时,这种方法才有效。由于我需要截获关闭的内部尝试,我正在使用,这样我可以捕获关闭应用程序主对话框的所有尝试,但是我仍然无法阻止关闭: public abstract class AppBase extends Application { public void init(){ dialogoPrincipal.getPainel

我试图阻止关闭我的应用程序,但在查看JavaFX文档(以及一些实现之后)时,我注意到只有当用户尝试使用close按钮或ALT+F4快捷方式关闭窗口时,这种方法才有效。由于我需要截获关闭的内部尝试,我正在使用,这样我可以捕获关闭应用程序主对话框的所有尝试,但是我仍然无法阻止关闭:

public abstract class AppBase extends Application {
    public void init(){
        dialogoPrincipal.getPainel().getScene().getWindow().setOnHiding(new EventHandler<WindowEvent>() {
            @Override
            public void handle(WindowEvent event) {
                event.consume();
            }
        });
    }
}
公共抽象类AppBase扩展应用程序{
公共void init(){
dialogoPrincipal.getPainel().getScene().getWindow().setOnHiding(新的EventHandler()){
@凌驾
公共无效句柄(WindowEvent事件){
event.consume();
}
});
}
}

我做错什么了吗?是否有其他方法可以解决此问题?

尝试在控制器上实现窗口事件处理程序:

public class XYZ implements EventHandler<WindowEvent>
{
    @Override
    public void handle( WindowEvent closeEvent )
    {
        closeEvent.consume();
    }
}
公共类XYZ实现EventHandler
{
@凌驾
公共无效句柄(WindowEvent closeEvent)
{
closeEvent.consume();
}
}

或者尝试在AppBase类上实现它。

CloseRequest
事件由GUI用户触发,而
Hide
事件则通过编程方式调用。因此,您可以控制
hide
事件调用的代码流。实现一些包装器util类,比如
StageUtil.hideRequest(stage)
,或者将自己的类扩展为
stage.myHide()
等。隐藏事件似乎无法使用,我认为这是一个正确的设计决定。
隐藏
隐藏
事件的目的在它们的Javadoc中有描述,没有提到使用它们。

我可以问一下,为什么您要有效地阻止应用程序终止吗?@PeekaySwitch根据用户的任务,应用程序在尝试关闭时会要求确认。