problema con jOptionPane y requestFocus()

Hola que tal, mi nombre es Javier Torres
primera vez posteando y es un grito de auxilio en lugar de un aporte...

estoy desarrolando un gui para una agenda telefonica, estoy en la pantalla de alta de registro.
estoy usando los "nuevos" jFormattedTextField con un formateador para mascaras MaskFormatter("###-##-##")

estoy validando que cuando este incompleto el jFTF mande un
JOptionPane.showMessageDialog(this, "formato invalido", "campo invalido", JOptionPane.ERROR_MESSAGE);

para validar eso, pongo este codigo en un FocusEvent del jFTF asi:

private void jftfFocusLost(java.awt.event.FocusEvent evt)
{
//JOptionPane.showMessageDialog(this, "formato invalido", "campo invalido", JOptionPane.ERROR_MESSAGE);
try {
jftf.commitEdit();
} catch (ParseException ex) {
Logger.getLogger(RegistroClientes.class.getName()).log(Level.SEVERE, null, ex);
JOptionPane.showMessageDialog(this, "formato invalido", "campo invalido", JOptionPane.ERROR_MESSAGE);
}

miFormattedTextField.requestFocus(); ////////////// HE AQUI EL PROBLEMA!!!!!!!!!!!!!!!!!!!!!!
}

lo valida bien, cuando no se completa el formatted field manda el mensaje, el problema es cuando quiero que despues de cerrar el mensaje del jOptionPane ese formatted field que no cumplio con la validacion recupere el foco para que el usuario corrija el texto.

y en cuando ejecuta esta linea de codigo : miFormattedTextField.requestFocus(); ////////////// HE AQUI EL PROBLEMA!!!!!!!!!!!!!!!!!!!!!!
se cicla el joption pane, aparece tres veces seguidas.
aparentemente antes de cerrarse el joption pane, el formatted field gana el foco y como sigue sin corregirse el texto vuelve a mandar el jOption pane y vuelve a pasar lo mismo 3 veces seguidas.
ya probe el metodo requestFocusOnWindow() y pasa lo mismo
probe otras formas de validad el campo para que me adviertiera del error y sucede lo mismo siempre que uso un jOptionPane y quiero regresar el foco a otro componente se cicla 3 veces.
alguien sabe algo de esto???
como lo resolvieron? o algun "workaround" que sepan porfavor!!
javier_tf@live.com

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.

PRESUNTA SOLUCION!

NUEVAS NOTICIAS!!!!
leyendo por ahi sobre EDT, SwingUtilities.invokeLater(Runnable) encontre la forma de arreglar lo del focus. segun los eventos del foco "no se ejecutan" en el EDT si mal no entendi, el edt es el event dispatch threat, es decir el hijo de ejecucion donde se ejecuta todo lo relacionado con los componentes awt y swing. segun las lecturar a excepción de lo del foco. entonces tenemos diferentes hilos corriendo "simultanea o paralelamente" (ojo con las "", es realidad es no al mismo mismo tiempo, es otro tema eso.) por lo que a la hora de que el jFTF pide el foco con el metodo requestFocus el evento se ejecuta en otro hilo. (no tengo el conocimiento necesario ni comprobado, segun lei por ahi si mal no entendi). para no dar mas largas aqui esta como lo solucione y funciona bien
---------------------------------------------------------
private void jftfFocusLost(java.awt.event.FocusEvent evt) {
//JOptionPane.showMessageDialog(this, "formato invalido", "campo invalido", JOptionPane.ERROR_MESSAGE);
try {
jftf.commitEdit();
} catch (ParseException ex) {
Logger.getLogger(RegistroClientes.class.getName()).log(Level.SEVERE, null, ex);
JOptionPane.showMessageDialog(this, "formato invalido", "campo invalido", JOptionPane.ERROR_MESSAGE);
/////////////////////AQUI EMPIEZA LA SOLUCION
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
jftf.requestFocus();
}
});
//////////////////////////AQUI TEMINA LA SOLUCION
}

la peticion del foco la envolví en otro hilo mediante el SwingUtilities.invokeLater( Runnable) y listo.
NOTA: espero alguien me pueda aclarar mas este asunto y explicar porque funciona asi esto.