我有一个程序,我用System.exit(0)终止;命令。
当发生这种情况时,JPanel关闭。我希望它重命名为open,这样我就可以在终止时查看状态。有没有办法让Jpanel保持打开状态,或者是否有比System.exit()更好的命令?
不确定为什么投票我问了一个简单的问题并且有人回答了。我无法这样做,所以尝试别的东西。要使用true false来测试进入模拟循环的位置。
答案 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
.dispose()
相应的jpanel / frame 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前面对此进行测试。