怎么能让JPanel关闭System.exit(0)

时间:2016-05-16 18:37:36

标签: java swing

我有一个程序,我用System.exit(0)终止;命令。
当发生这种情况时,JPanel关闭。我希望它重命名为open,这样我就可以在终止时查看状态。有没有办法让Jpanel保持打开状态,或者是否有比System.exit()更好的命令?

不确定为什么投票我问了一个简单的问题并且有人回答了。我无法这样做,所以尝试别的东西。要使用true false来测试进入模拟循环的位置。

3 个答案:

答案 0 :(得分:4)

关于:

  

有没有办法让Jpanel保持打开状态,或者是否有比System.exit()更好的命令?

最佳解决方案:不要致电System.exit(...)。为什么?因为System.exit(0)关闭了JVM,所以在调用System.exit(0)时,该JVM上运行的所有Java进程都将关闭。

至于“更好的指挥”,这一切都取决于你的需要。如果您只想关闭JDialog等窗口,请调用myWindow.setVisible(false);。如果要关闭它并释放资源,请myWindow.dispose();

注意:我怀疑您可能打开了多个窗口,可能是多个JFrame。如果是这样,我强烈建议您阅读:The Use of Multiple JFrames, Good/Bad Practice?

您还发表了评论:

  

我想保持Jpanel打开,但停止模拟运行。当满足某些条件时,我需要停止Sim。所以我写了一个停止()

所以你的问题实际上是XY Problem,在那里你问如何解决一个特定的代码问题(在调用System.exit(0)后保持JPanel打开),当最好的解决方案是使用完全不同的方法时。更好的是,你告诉我们你要解决的整体问题,而不是你现在正在尝试解决的问题,因为System.exit不会成为最佳解决方案的一部分。

可能最好的解决方案是将您的仿真模型与其视图(GUI)完美分离,以便能够提供允许其在不关闭JVM的情况下停止的模型功能 - 我无法说出如何给出我们的关于您的问题的当前知识水平 - 然后反映在视图中停止模型,同样不关闭系统。

所有这些的关键在于当前程序的细节,包括支持模拟的逻辑,如果您需要更具体和可能更有用的答案,那么您将再次想要改进您的问题,向我们提供有关您的代码,您的问题以及相关代码发布的更多具体信息,最好是minimal example program

答案 1 :(得分:2)

您是否尝试过类似的方法: Do something when the close button is clicked on a JFrame

        import javax.swing.JOptionPane;
        /*Some piece of code*/
        frame.addWindowListener(new java.awt.event.WindowAdapter() {
            @Override
            public void windowClosing(java.awt.event.WindowEvent windowEvent) {
                    //delete this code if you want and replace with .dispose() or anything
                if (JOptionPane.showConfirmDialog(frame, 
                    "Are you sure to close this window?", "Really Closing?", 
                    JOptionPane.YES_NO_OPTION,
                    JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION){
                    //choose to close JVM here if you want
                    System.exit(0);
                }
            }
        });

答案 2 :(得分:0)

这是一种方法,通过覆盖JVM的SecurityManager:

//set your security manager
static{
     SecurityManager s = new DontCloseOnExitSecurityManager();
     System.setSecurityManager(s);
}

static class DontCloseOnExitSecurityManager extends SecurityManager{
     public void checkExit(int code){
         //here you can put a check to see if you really do want to close - like if the JFrame is still open.
        if(/*do some check*/ 13 == code)
         super.checkExit(code);
         throw new SecurityException("13 is unlucky, you shouldn't system exit on it.");
       }
     }
 }

您需要找到一个合适的位置,以及如何进行检查(在checkExit中)。

对于不准确的道歉,我现在不在IDE前面对此进行测试。