我刚学Java没几个星期,现在用java编了一个记事本,定义了一个窗口适配器类,当点击那个关闭窗口时,会弹出对话框,有保存,不保存,取消,但是点取消,窗口还是关闭了,不像点击菜单项的退出那样,点击取消还是会留在编辑区,这个怎么解决? ( 实现部分的代码和菜单项下的退出的实现代码一样)
下面是定义和实现的程序代码:

         //定义一个窗口监听器
addWindowListener( new WindowAdapter()
{
public void windowClosing(WindowEvent event)
{
exitForm(event);
}
});
//当应用程序关闭时被调用
private void exitWindow(WindowEvent event)
{
int n;
Object[] option = {"保存","不保存","取消"};

if(changed == true)
{
//打开对话框
n = JOptionPane.showOptionDialog(null,
"你的文件还没有保存,是否保存?", 
"保存", 
JOptionPane.YES_NO_CANCEL_OPTION, 
JOptionPane.QUESTION_MESSAGE,
null,
option,
option[0]);
switch(n)
{
case JOptionPane.YES_OPTION:
{
doSave(fileName);//保存文件
System.exit(0);
}

case JOptionPane.NO_OPTION:
{
System.exit(0);
}

case JOptionPane.CANCEL_OPTION:
{
break;
}
}
}
}

解决方案 »

  1.   

    我只看到了传进来的event好像没用到。
      

  2.   

    你用了 System.exit(0)  整个程序都会退出,建议你用其他的方法试试看
      

  3.   

    addWindowListener( new WindowAdapter()
    {
    public void windowClosing(WindowEvent event)
    {
    exitForm(event);//这里仅仅是执行了exitForm;而exitForm中并没有阻止窗口关闭的操作.,
    });
      

  4.   

    case JOptionPane.CANCEL_OPTION:
    {
    break;
    }//虽然你这里没有执行exit,但是windowClosing方法照样继续执行,关闭窗口状态并没有改变.
    //
    case JOptionPane.YES_OPTION:
    {
    doSave(fileName);//保存文件
    System.exit(0);//把这句注释掉,选择Yes依然会关闭窗口
    }
      

  5.   

    找到解决方法了.
    LZ在窗口构造函数里加上
    setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);//在点击关闭时不做任何事,手动退出程序
    这样就可以了
      

  6.   

    不是的,这个我试过,还是一样的问题,后来解决了,是把cancel操作下的break;换成frame.setVisible(true);就可以了其他的地方时没有问题的。还是非常谢谢你的帮助