Cómo actualizo un el valor de un Jlabel

Hola comunidad que tal !!

Quisiera saber si alguien puede ayudarme con esto: Estoy trabajando con swings en java.
Tengo un Form y varias clases (llamados Conexion, CrearArchivos, etc.). El form, obviamente con swings.

Lo que no puedo hacer, es cambiar el valor del label que tengo en mi form. La intensión que tengo, es que en el label me muestre los mensajes de lo que ocurre en cualquiera de las clases. Por ejemplo entre ellos, quiero que cuando se realice la conexión (con sockets) en mi clase Conexíon, me envie un mensaje al label del form para que el usuario pueda verlo.
Además, quiero mostrar en un TextArea lo que en el socket vaya llegando (datos) en tiempo real.

He intentado hacer esto en el form:

public void mostrarMensajes(String mensaje){
label.setText(mensaje);
validate();
}

y tambien con:

public void mostrarEnTextArea(String dato){

textArea.append(dato);
repaint();
}

pero no me refresca el label, y tampoco el textArea. Por favor alguien ayudeme. Gracias.

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.
Imagen de Nopalin

Si esos son los metodos que

Si esos son los metodos que debes utilizar, puedes publicar algo de codigo para ver como lo estas haciendo?

sobres

Imagen de jtepetate

Mi codigo...

Hola Nopalin, buen dia...este es mi codigo del form donde quiero mostrar el mensaje en un label...solo que no refresca...ojalá me puedas ayudar...te lo agradezco.

 

No se si esté haciendo algo mal...pero ya intenté de varias formas. Con validate(), revalidate(), repaint(), y nomás no...

Imagen de Nopalin

Bueno solo una cosa, cuando

Bueno solo una cosa, cuando pongas codigo tan grande trata de que sea ejecutable, es decir que lo copie y pegue y se ejecute, o si tiene dependencias indicales cuales y donde estan para que sea mas fácil reproducir el error.

No lo pude hacer jalar, pero analizando el codigo veo que utilizas mas threads. Cuando ejecutas una aplicacion java se crea un thread llamad AWT, que es el único que puede dibujar graficos, así si tu haces un setText con otro thread que no sea el AWT no va a pintar nada, por lo tanto lo que debes hacer es encolar esa llamada en la pila de llamadas del thread AWT para que éste sea el encargado de dibujarlas.

Eso lo haces de la siguiente manera:

 

sobres

Imagen de jtepetate

Lo siento...tienes razón

Tienes razón, sería más facil si el código fuera ejecutable...lo siento mucho.

He intentado como dijiste, pero tampoco me actualiza el label.

No te entendí mucho lo del thread AWT. Crees que tenga que ver con el thread que pinta el reloj en otro label...porque ese si actualiza cada segundo. Pero mi label donde quiero mostrar mis mensajes no lo hace...

No leí todo el post pero

No leí todo el post pero esto debe de funcionar para actualizar un label.

 

Lo que tienes que hacer es llamar a "setText" dentro del EDT ( el actionPerformed del ActionListener se llama dentro del EDT ), SwingUtilities ( como lo menciona Nopalín ) también se ejecuta en el EDT.

Yo sé la respuesta

Buenas. Pues la cosa es tan complicada como que swing no es seguro para hilos(thread-safe). pues según pone en el link que te paso un poco más abajo:
Las tareas que consumen tiempo no deben ejecutar el hilo Event Dispatch Thread. En otro caso la aplicación no garantiza nada.
Componentes Swing deben ser accedidas con el hilo Event Dispatch solo.

Por eso si tiene mucho trabajo (tipo BB.DD) pues no hay manera de actualizar el JLabel. Para esto se incluyó la clase SwingWorker desde la versión 6 de java, puedes mirarla por ejemplo aquí:

En esa clase que te he puesto pone todo. TE ASEGURO QUE ES ESO!!!!. pues yo me volví loco hasta encontrar la respuesta.

En la aplicación java puedes poner: