Java: pasar datos de una clase a otra que es un JFrame Swing

Buenos días.

A ver si me explico un poco de manera decente, para que alguien me eche un cable.

Tengo una aplicación hecha para escritorio y está funcionando correctamente.

Quiero hacer una serie de mejoras y consiste en que en un formulario, poner un JTextArea y que escriba un log para ver el progreso de la aplicación. En .NET sí sé hacerlo, pero aquí algo me está fallando y no me escribe nada.

Tengo lo siguiente:

Paquete Serial.

Y dentro de ahí está:

- BBDD.java (formulario Swing)
- Datos.java
- Serialize.java
- Inicio.java (formulario Swing).

El proceso principal se hace en Serialize.java. En realidad consiste en abrir un fichero Excel, copia los datos de dicho fichero Excel en ArrayList, hacer transformaciones necesarias y guardar los datos transformados en Excel.

Lo que quiero que durante ese proceso (en Serialize.java) escriba los datos en un JTextArea que está en Inicio.java.

He intentado hacer esto:

Serial.Inicio inicio = new Serial.Inicio();

Y no escribe absolutamente nada.

¿Qué es lo que estoy haciendo mal?

Sé que hay librerías como Log4j, que seguramente me permitiría hacer esto mejor, aunque por razones que no entiendo, no me funciona en absoluto (quizás sea la librería, la volvería a bajar).

Un saludo y muchas gracias.
Yo creo que lo que te pasa es que estás corriendo todo sobre el hilo principal. Y esto hace que la interfaz no se actualice hasta que la lógica termine.
La solución que le veo es lanzar la lógica en un hilo a parte.
Te pongo más o menos lo que tienes que tener y ya lo modificas tú a tus necesidades.
En la clase de la interfaz de usuario:
   public void lanzarLogica() {
      Serialize es = new Serialize(this);
      es.start();
   }

   public void mostrarPorPantalla(String texto) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            JTextArea tx = getTextArea();
            tx.setText(tx.getText() + "\n" + texto);
         }
      });
   }

En la clase serialize:
public class Serialize extends Thread {
   
   private Ventana ventana;

   public Serialize(Ventana v) {
      super();
      this.ventana = v;
   }
   
   public void log(String str){
      ventana.mostrarPorPantalla(str);
   }
   
   public void logica() {
      log("Paso 1");
      //Lógica
      log("Paso 2");
      //Lógica
      log("Paso 3");
   }
   
   
   @Override
   public void run() {
      logica();
   }

}
1 respuesta