Otra tontería de java que he aprendido y que no sabía.
Sabía que un JOptionPane.show… mostraba un diálogo modal y que el código se queda bloqueado en la llamada hasta que se contesta al diálogo modal y se cierra. De alguna manera es la forma de pedirle una confirmación o un dato al usuario y esperar que conteste para seguir el código.
Lo que no sabía es que un setVisible(true) de un JDialog modal vulgaris también deja bloqueado el código hasta que se cierra el diálogo modal. En el siguiente código
public static void main(String[] args) {
JDialog d = new JDialog(new JFrame(),true);
d.getContentPane().add(new JLabel("un dialogo"));d.pack();
d.setVisible(true);
System.out.println("Aquí estoy");
}
el "Aquí estoy" no sale hasta que le usuario cierre el JDialog.
Mirando el código fuente, el método setVisible está implementado en la clase «Component» el cual simplemente es una llamada a show(), método que está deprecated.
Por cierto, ¿Has probado SWT? Odio hacer GUIs pero jode todavía más cuando haces una GUI con swing/awt y ves que queda mogollon de fea xD. Con SWT al final usas widgets propios del SO.
Hola:
Algo he mirado de SWT, pero al final por no meter más librerías adicionales, prefiero seguir con SWING.
Lo que si suelo hacer es cambiar el LookAndFeel para que coja el del sistema operativo, por lo que el aspecto de las ventanas al final es similar al de cualquier otra aplicación en el mismo sistema operativo.
Se bueno.
Buenas…
El EventDispatcherThread , se queda bloqueado a la espera de acciones debido a que has definido al diálogo como «modal» (a través del «true» del constructor), al igual que el JOptionPane los crea de manera interna. Es por ello que no continúa la ejecución hasta que cierres este (métodos «setVisisble» y «dispose»).
Otro día con un poquito más de tiempo os intentaré contar algún cuentecillo relacionado con el close de los diálogos para JRE 1.6.x desde varios Threads …
(… el cuento acaba con que la abuelita le dice al lobo que use más «disposes» y menos «setVisible(false)» 😀 ).
Un saludo,
DaniP
Pingback: Diario de Programación » SWT y JFace