2014-10-03 219 views
2

如何通过点击windows taskbar -> close window来强制检测java window closing通过Windows任务栏强制关闭窗口 - >关闭

Example

我发现窗口关闭接收WINDOW_CLOSING事件,可以通过增加windowListener处理。但在这种情况下,窗户无论如何都会关闭。有什么办法可以防止窗户关闭?

+6

*“有什么方法可以防止窗户关闭吗?”*我当然希望不会。当我(作为用户)告诉应用程序时。关闭,我期望它这样做。否则,我会通过任务管理器杀死它并将其卸载。 – 2014-10-03 13:46:17

+0

从这个角度来看,我的问题听起来很可怕。但我需要这个,因为在接近的时候,艰难的业务流程正在运行,而窗口应该在运行时显示。很容易检测到'Alt + F4'并自己修改Windows'window decorations',所以我希望有任何方法可以解决这个问题。 – SeniorJD 2014-10-03 13:48:34

+0

对不起,希望能分散你的希望,但不仅可以防止窗口被关闭,还可以防止任何taskmanager终止整个进程,只有内核本身可能会强制你的线程停止(通过丢弃任何进一步的执行周期并从管道中删除您的代码) - 但这是非常糟糕的做法,很可能会触发防病毒软件 – specializt 2014-10-03 13:58:10

回答

1

您可以将默认关闭操作设置为DO_NOTHING_ON_CLOSE,并请求用户进行确认。它甚至如果你想通过X按钮关闭框架,组合键一个很常见的做法(即:ALT + F4)或关闭窗口的任何方法:

JFrame frame = new JFrame("Welcome!"); 
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 

frame.addWindowListener(new WindowAdapter() { 
    @Override 
    public void windowClosing(WindowEvent e) { 
     int option = JOptionPane.showConfirmDialog(null, "Do you really want to exit?"); 
     if (option == JOptionPane.OK_OPTION) { 
      e.getWindow().dispose(); 
     } 
    } 
}); 
+0

好的解决方案。但是在按下TaskBar-> Close之后,有没有在'windowClosing'之前调用的方法? – SeniorJD 2014-10-03 14:01:57

+0

嗯...我不知道,因为关闭事件一旦发生就会被处理。无论我使用'windowActivated()'和'windowDeactivated()'方法,都不符合要求。你在评论中说,当按下'ALT + F4'时你已经想出了如何做你需要的东西。你不能在'windowClosing()'实现上做同样的事吗? – dic19 2014-10-03 14:17:40

+0

我试过了,但不起作用。 – SeniorJD 2014-10-03 14:19:46

0

为了防止窗口关闭您应该在您的JFrame实例上调用

setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE) 

,然后通过windowListener实现您的备选关闭过程。