Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > getContentPane().setBackground Error

Voy a explicar mi código: puedo cambiar el color de fondo del panel de color verde (antes de que fuera rojo), entonces quiero una pausa de dos segundos para que el usuario pueda ver el cambio de color y los datos que se han cargado antes y después llama a una función (changeOrder) que carga los nuevos datos y un nuevo color de fondo.


hex = 0x22E882;
rgb = hexRGB(hex);
getContentPane().setBackground(new java.awt.Color(rgb[0], rgb[1], rgb[2])); //Green
jTextField1.setText("");
jTextField1.requestFocus();
Thread.sleep(2000);
changeOrder();

El problema es que cuando hago una pausa, el programa no cambia el color de fondo de rojo a verde. Es congelado y no muestra este cambio. ¿Alguna sugerencia porque no veo que el cambio? Si quito la función "ChangeOrder", si puedo ver el cambio de color

septiembre 17, 2014 | Unregistered CommenterDespotars

No expliques tanto el código, y prueba a publicarlo completo, o un test que muestre claramente el error.
Mencionas ese changeOrder() que no se sabe qué es.

septiembre 18, 2014 | Registered Commenterchoces

Estás ejecutando la secuencia completa de instrucciones en el EDT (Event Dispatch Thread) de Swing, que también se encarga de dibujar los componentes. El EDT procesa las tareas en orden, por lo que tu tarea, desde "hex = 0x22E882;" hasta "changeOrder();", se ejecuta completa antes de que al evento disparado al cambiar el color de fondo, que es lo que permitiría que se dibuje el fondo en color verde, le llegue el turno.

Como, por lo que dices, el método changeOrder() restaura de nuevo el color rojo, se dispara un nuevo evento relativo al color de fondo y EDT probablemente descarta el primer evento que lo ponía en verde; incluso si no lo hace, como ambos eventos se ejecutan en cuestión de milésimas de segundo uno detrás de otro, no da tiempo a que el color se repinte en la pantalla.

septiembre 18, 2014 | Registered Commenterrickiees