Ciao a tutti

Dubbio su swing...
Sto cercando di subordinare la chiusura di una finestra ad un metodo void uscita(), che venga cioè richiamato quando si preme la X di questo oggetto JFrame.
Il metodo uscita non fa altro che chiedere la conferma con una JConfirmDialog (del tipo "OK","ANNULLA") ed è fatta così:

codice:
public void uscita() {
		
		int risultato = JOptionPane.showConfirmDialog(principale,"Sei sicuro di voler uscire?","Sei sicuro?",JOptionPane.OK_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE);
		if (risultato == JOptionPane.OK_OPTION)
			System.exit(0);
		
}
Per fare in modo che venga richiamata alla pressione di X ho detto alla mia classe di implementare WindowListener e gli ho definito il metodo windowclosing semplicemente in questo modo:

codice:
public void windowClosing(WindowEvent e) {
        
		uscita();		
}
Se si preme ok, e si vuole effettivamente uscire tutto funziona.
Se si preme annulla, la JDialog, invece di sparire, viene riproposta inaspettatamente!
Perchè??

Info aggiuntiva:
Il debug del programma mostra come avviene la chiusura della finestra a livello della classe AWTEventMulticaster
Vedo come effettvamente la richiesta viene fatta 2 volte! Infatti nella suddetta classe:

codice:
public void windowClosing(WindowEvent e) {
        ((WindowListener)a).windowClosing(e);
        ((WindowListener)b).windowClosing(e);
    }
Che faccio?????