[eside-ghost] Swing, threads y demás

Saúl Ibarra saghul en gmail.com
Vie Feb 29 19:29:28 CET 2008


Hoola!

Tengo una dudilla aquí con mi amigo swing, y me surge el siguiente problema:

Reduciendolo es básicamente esto: tengo una ventana (A) y quiero que
al hacer click en un botón se me abra otra (B), pero que si le hago
click cuando ya se encuentra abierta no haga nada.

En el main lanzo 2 ventanas, A y C, casda una  en un hilo, de la
siguiente manera:

SwingUtilities.invokeAndWait(new Runnable() {
	public void run() {
		ventana = new V1();
		ventana.setVisible(true);
	}
});

Donde "ventana" es un atributo estático de una clase
VentanaController, que me saca la ventana sin más.

Si desde el main llamo 2 veces a pintar la misma ventana si que puedo
comprobar si ventana es null o ya la heninicializado, PERO, si ejecuto
ese trozo de código desde el action listener del botón, me da un super
error "Cannot call invokeAndWait from the event dispatcher thread".

He estado leyendo la web de 'concurrency in swing' y tal, pero no me
queda claro como hacer lo que pretengo...


Espero haberme explicado :) Thnx!


-- 
Saúl -- "Nunca subestimes el ancho de banda de un camión lleno de disketes."
----------------------------------------------------------------
http://www.saghul.net/


Más información sobre la lista de distribución eside-ghost