Solicitar confirmación al cerrar ventana

Hola:

Como comente en una duda anterior estoy intentando hacer mi primera aplicacion profesional en JAVA por lo cual pido y solicito mucha paciencia vengo de trabajar con VB .Net y quiero utilizar JAVA por su capacidad de interoperabilidad entre diferentes OS, su eficiencia y mejora en muchos sentidos....
Estoy intentando hacer la clasica operacion de ventanas, que pregunte al usuario si en verdad desea cerrar la aplicación si el usuario clickea en si proceder a cerrarla caso contrario evitar el cierre. Navegando en la web encontré un codigo que al parecer realiza dicha operación pero no he logrado hacerlo funcionar con lo que estoy implementando dejo mi codigo ojalá puedan asesorarme u orientarme gracias y saludos cordiales.

Clase frmJDeskPane que conendra los formularios hijos

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class frmJDeskPane extends JDesktopPane{
        private Image imgBackground = null;
        public frmJDeskPane(){
                try{
                        //imgBackground = new ImageIcon(getClass().getResource("imagenes/background.jpg")).getImage();
                        imgBackground = new ImageIcon(getClass().getResource("imagenes/MySQL.png")).getImage();
                }
                catch(Exception e){
                        System.out.println("No se encuentra el archivo " + getClass().getResource("."));
                }
        }
       
        public void paintComponent(Graphics g){
                if (imgBackground == null){
                        super.paintComponent(g);
                }
                else{
                        Graphics2D g2d = (Graphics2D) g;
                        int intLeft = 0;
                        int intTop = 0;
                        int intOpc = 2;
                        switch (intOpc){
                                //Expandir imagen
                                case 0: g2d.drawImage(imgBackground, 0, 0, getSize().width, getSize().height, this);
                                        break;
                                //Centrar en pantalla
                                case 1: intLeft = (getWidth()/2) - (imgBackground.getWidth(null)/2);
                                        intTop = (getHeight()/2) - (imgBackground.getHeight(null)/2);
                                        g2d.drawImage(imgBackground, intLeft, intTop, this);
                                        break;
                                //Mosaico
                                case 2: while(intTop < getHeight()){
                                                        while(intLeft < getWidth()){
                                                                g2d.drawImage(imgBackground, intLeft, intTop, this);
                                                                intLeft += imgBackground.getWidth(null);
                                                        }
                                                        intLeft = 0;
                                                        intTop += imgBackground.getHeight(null);
                                                }
                        };
                }
        }
}

Clase frmMDI je creo que su nombre lo dice todo... será el formulario principal y es donde deseo realizar la confirmación de cierre

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class frmMDI extends JFrame{
        private frmJDeskPane JDeskPane;
        private JMenuBar jmbBarraMenu;
        private JMenu jmArchivo;
        private JMenuItem jmiCambiarUsuario;
        private JMenuItem jmiCerrarSesion;
        private JMenuItem jmiSalir;
        private JMenu jmCatalogos;
        private JMenu jmHerramientas;
        private JMenuItem jmiRespaldar;
        private JMenuItem jmiRestaurar;
        private JMenu jmVer;
        private JMenu jmAyuda;
        private JMenuItem jmiSICEM;
        private JMenuItem jmiAcerca;
       
        /*----------------------------------------------------------------------------
        CONSTRUCTOR DE CLASE----------------------------------------------------------
        -----------------------------------------------------------------------------*/

        public frmMDI(String strRutaImagen){
                Inicializa_Interfaz();
                //Le decimos a Java que no haga nada cuando el usuario quiera cerrar la ventana
                setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
                this.addWindowListener(
                        new WindowAdapter(){
                                public void windowClosing(WindowEvent e){
                                        ConfirmarCerrar();
                                }
                        }
                );
        }
       
        private void CierraVentana(){
                setDefaultCloseOperation(EXIT_ON_CLOSE);
                setVisible(false);
                dispose();
        }
       
        private void ConfirmarCerrar(){
                JDialog dialog = new JDialog (this);
                JButton boton = new JButton ("Cierra");
                boton.addActionListener(new ActionListener () {
                        public void actionPerformed(ActionEvent e) {
                                setVisible(false);
                                dispose();
                                CierraVentana();
                        }
                });
                dialog.getContentPane().add(boton);
                dialog.pack();
                dialog.setVisible(true);
        }
       
        private void Inicializa_Interfaz(){
                //Establecemos el título de la aplicación
                setTitle("SICEM - Sistema de Control Escolar Montessori");
                //Creamos un ImageIcon que será el icono del Form
                ImageIcon imgIcon =new ImageIcon("imagenes/sicem_icon.png");
                //Lo colocamos
                setIconImage(imgIcon.getImage());
                //Creamos una nueva barra de Menu
                jmbBarraMenu = new JMenuBar();
                //Creamos el elemento de menu Archivo
                jmArchivo = new JMenu("Archivo");
                //Creamos la opcion Cambiar de Usuario
                jmiCambiarUsuario = new JMenuItem("Cambiar de usuario", new ImageIcon ("imagenes/usuarios_icon.png"));
                jmiCambiarUsuario.setMnemonic(KeyEvent.VK_F12);
                jmArchivo.add(jmiCambiarUsuario);
                //Creamos la opcion Cerrar Sesion
                jmiCerrarSesion = new JMenuItem("Cerrar sesión", new ImageIcon ("imagenes/locked_icon22x22.png"));
                jmiCerrarSesion.setMnemonic(KeyEvent.VK_F11);
                jmArchivo.add(jmiCerrarSesion);
                jmArchivo.addSeparator();
                //Creamos la opcion Salir del menu archivo
                jmiSalir = new JMenuItem("Salir", new ImageIcon ("imagenes/exit_icon22x22.png"));
                jmiSalir.setMnemonic(KeyEvent.VK_ESCAPE);
                jmArchivo.add(jmiSalir);
                //Creamos el elemento de menu Catalogo
                jmCatalogos = new JMenu("Catálogos");
                //Creamos el elemento de menu Herramientas
                jmHerramientas = new JMenu("Herramientas");
                //Creamos el elemento de menu Respaldar
                jmiRespaldar = new JMenuItem("Respaldar Base de Datos");
                //Creamos el elemento de menu Restaurar
                jmiRestaurar = new JMenuItem("Restaurar Base de Datos");
                //Creamos el elemento de menu Ver
                jmVer = new JMenu("Ver");
                //Creamos el elemento de menu Ayuda
                jmAyuda = new JMenu("Ayuda");
                //Creamos el elemento de menu AyudaSicem
                jmiSICEM = new JMenuItem("Contenido");
                //Creamos el elemento de menu acercade
                jmiAcerca = new JMenuItem("Acerca de...");
               
                jmbBarraMenu.add(jmArchivo);
                jmbBarraMenu.add(jmCatalogos);
                jmbBarraMenu.add(jmHerramientas);
                jmbBarraMenu.add(jmVer);
                jmbBarraMenu.add(jmAyuda);
                setJMenuBar(jmbBarraMenu);

                JDeskPane = new frmJDeskPane();
                add(JDeskPane);
               
                //Se maximiza la ventana
                setExtendedState(JFrame.MAXIMIZED_BOTH);               
        }
}

Clase frmLogin que será la que realize el logeo de usuarios

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class frmLogin extends JFrame{
       
        //Controles
        private JButton btnIngresar, btnSalir;
        private JLabel lblUsuario, lblPassword;
        private JTextField txtUsuario, txtPassword;
 
        /*----------------------------------------------------------------------------
        CONSTRUCTOR DE CLASE----------------------------------------------------------
        -----------------------------------------------------------------------------*/

        frmLogin(String strTitulo){
                //Establecemos el título del Formulario
                setTitle(strTitulo);
                //Inicializamos los controles
                Inicializa_Interfaz();
        }
       
        private void Inicializa_Interfaz(){
                //Establecemos el ancho y alto
                setSize(277,125);
                //Indicamos que no va a poder redimensionarse
                setResizable(false);
                //Creamos un ImageIcon que será el icono del Form
                ImageIcon imgIcon =new ImageIcon("imagenes/usuarios_icon.png");
                //Lo colocamos
                setIconImage(imgIcon.getImage());
                //Indicamos que no queremos un Administrador layout
                getContentPane().setLayout(null);
                //Anexamos la etiqueta lblUsuario al Formulario y establecemos propiedades             
                getContentPane().add(lblUsuario = new JLabel("Usuario: "));
            lblUsuario.setBounds(5, 0, 150, 30);
            //Anexamos el txtUsuario al Formulario y establecemos propiedades
            getContentPane().add(txtUsuario = new JTextField("",10));
            txtUsuario.setBounds(80, 10, 180, 18);
            //Anexamos la etiqueta lblPassword al Formulario y establecemos propiedades
            getContentPane().add(lblPassword = new JLabel("Password:"));
            lblPassword.setBounds(5, 25, 61, 30);
            //Anexamos el txtPassword al Formulario y establecemos propiedades
            getContentPane().add(txtPassword = new JPasswordField("",10));
            txtPassword.setBounds(80, 35, 180, 18);
            //Anexamos el btnIngresar al Formulario y establecemos propiedades
                getContentPane().add(btnIngresar = new JButton("Ingresar"));
                btnIngresar.setMnemonic('I');
                btnIngresar.setBounds(30,60,110,23);
                btnIngresar.setIcon(new ImageIcon("imagenes/ok_icon20x20.png"));
                btnIngresar.addActionListener(
                new ActionListener(){  
                public void actionPerformed(ActionEvent event){
                        frmMDI desktopFrame = new frmMDI("imagenes/background.jpg");
                        //Evitamos que la aplicacion se cuelgue
                                        desktopFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                                        //Establecemos el tamaño de la ventana
                                desktopFrame.setSize( 600, 480 );
                                        //Centrar ventana en pantalla
                                        desktopFrame.setLocationRelativeTo(null);
                                        //Mostramos el formulario MDI
                                desktopFrame.setVisible(true);
                                        setVisible(false);
                }
                }
        );
                //Anexamos el btnSalir al Formulario y establecemos propiedades
                getContentPane().add(btnSalir = new JButton("Salir"));
                btnSalir.setMnemonic('S');
                btnSalir.setBounds(149,60,110,23);
                btnSalir.setIcon(new ImageIcon("imagenes/dont_icon20x20.png"));
                btnSalir.addActionListener(
                new ActionListener(){  
                public void actionPerformed(ActionEvent event){
                                        dispose();
                }
                }
        );
        }
}

Clase que contiene el MAIN

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
public class SICEM {  
    public static void main(String[] args) {           
        try{
                        //cambiamos el decorado de la interfaz
                        JFrame.setDefaultLookAndFeelDecorated(true);
                        //Creamos la ventana
                        frmLogin window = new frmLogin("Ingresar");
                        //Centrar ventana en pantalla
                        window.setLocationRelativeTo(null);
                        //Mostramos ventana en pantalla
                        window.setVisible(true);
                        //Hook para que no quede colgada la aplicacion
                        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                }
                catch(Exception e)
                        {JOptionPane.showMessageDialog(null, e.getMessage());}
    }
}

si alguien puede decirme en que parte estoy mal ó si estoy equivocandome en algo se los agradeceré muchisimo SALUDOS CORDIALES

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de neko069

...

Pues así, así como que no veo fallas.... sólo una observación.
Cuando yo trabajaba con Swing, lo que se usaba para confirmar el cerrar las ventanas, no era precisamente una variante de JDialog si no una variante de JOptionPane en tu método de Confirmar_Cerrar puedes checar la documentación del API, para que cheques las variantes, y el resultado que te arroja cada botón, suerte!!