Tengo una interfaz de usuario Java Swing que no está actualizando/volviendo a pintar como pensé que debería. La aplicación envía un mensaje XMPP y recibe una respuesta en un hilo diferente. Esa respuesta se procesa y la interfaz de usuario se actualiza para reflejar la información contenida en el mensaje.Swing UI no se actualiza después de usar invokeLater
Cuando se recibe la respuesta, actualizar un componente JPanel usando
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() { /* execute logic to update panel */ }
});
Ha sido bastante tiempo desde que he desarrollado en Java, pero basado en mi investigación invokeLater línea pone en cola el ejecutable para la ejecución de la Hilo de GUI. Sin embargo, mi GUI no se actualiza hasta que hago otra cosa en la aplicación que causa un repintado, como cambiar el tamaño de la ventana. ¿Qué me estoy perdiendo? Después de la lógica para actualizar el panel, he intentado varias combinaciones de invalidate() y repintado(), pero el resultado sigue siendo el mismo: la GUI no se actualiza hasta que, por ejemplo, cambie el tamaño de la ventana.
EDITAR: Cuando digo actualizar el panel, específicamente hago un removeAll() y luego agrego un puñado de JLabels.
Me gustaría actualizar esto, miles de veces. – JCasso