Pregunta

No soy un desarrollador de Java, pero tengo que escribir un pequeño applet para subir archivos a través de FTP (En realidad, soy un desarrollador web). Todo funciona bien, excepto por la forma en que se muestran los mensajes de retroalimentación. Me explico con un ejemplo:

Si escribiera sometingh así, dentro de un método (controlado por un evento de clic)

//....
myJpanel.setText("Connecting to remote server");

//actually, it's surrounded by try-catch statement
myFtpObject.connect(); //this is taken from a third part package 
myJpanel.setText("Connected")

Cuando trato de ejecutar este código se establece la conexión (después de que los archivos de conexión que carga con ningún problema), pero dentro de la Jpanel myJpanel I immeditaly leer "conectado" (madrugada, se tarda varios segundos de conexión) y nunca veo el "Conectando con el servidor remoto" cadena.

Me suena como el método Jpanel setText es amortiguada de alguna manera.
¿Cómo puedo mostrar mensajes en tiempo real?

(he tratado de hacer System.out.println para probar y funcionó muy bien!)
Gracias

¿Fue útil?

Solución

  

Si escribiera sometingh de esa manera dentro de un método (controlado por un evento de clic)

Código que se ejecuta en un detector de eventos se ejecuta en la EDT. El problema es que la tarea de larga duración es el bloqueo de la oscilación EDT. Por lo que la interfaz gráfica de usuario nunca tiene la oportunidad de volver a pintar en sí.

Leer la sección del tutorial Swing en concurrencia de más información y para una solución. La solución básica es crear un hilo separado para la tarea larga duración.

Esta es también la razón por System.out.println (..) funciona, ya que se ejecuta en un hilo diferente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top