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.

package interfaz;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.border.TitledBorder;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.dyno.visual.swing.layouts.Bilateral;
import org.dyno.visual.swing.layouts.Constraints;
import org.dyno.visual.swing.layouts.GroupLayout;
import org.dyno.visual.swing.layouts.Leading;

import conexion.Cliente;
import conexion.ConexionServidor;

//VS4E -- DO NOT REMOVE THIS LINE!
public class MyClase extends JFrame{
       
        public final static Logger log=Logger.getLogger(MyClase.class);
        private static final long serialVersionUID = 1L;
               
                     private JPanel jPanel0;
        private JRadioButton rbCliente;
        private JRadioButton rbServidor;
        private ButtonGroup grupoRadioButton;
        private JButton btnEsperar;
        private JButton btnDesconectar;
        private JLabel lblReloj;
        private Timer timer;
        public String cadenaHora;
        private static JTextArea taRecepciones;
        private JScrollPane jScrollPane0;
        private JPanel jPanel1;
        public String tipoConeccion;
        public String cadenaFecha;
        public String cadenaHoraLogs;
        private JPanel jPanel2;
       
        public ConexionServidor retransmision;
        private JTextField txtRetransmision;
        public static String mensajeAMostrar;
        public static JLabel lblMensaje;
       
        private static final String PREFERRED_LOOK_AND_FEEL = "javax.swing.plaf.metal.MetalLookAndFeel";
        public MyClase(){

                PropertyConfigurator.configure("src\\log4j.properties");
               
                initComponents();
               
                timer= new Timer();
                timer.schedule(new Segundero(),0,1000);
               
                grupoRadioButton=new ButtonGroup();
                grupoRadioButton.add(getJRadioButton0());
                grupoRadioButton.add(getJRadioButton1());

               
        }
       
        //Muestra el reloj en el formulario
        class Segundero extends TimerTask{

                public void run(){
                       
                Date fechaActual= new Date();
                SimpleDateFormat formatoFecha= new SimpleDateFormat("yyyyMMdd");
                cadenaFecha= formatoFecha.format(fechaActual); 
                       
                Date horaActual= new Date();
                SimpleDateFormat formatoHora= new SimpleDateFormat("H:mm:ss");
                cadenaHora= formatoHora.format(horaActual);
               
                SimpleDateFormat formatoHoraLogs= new SimpleDateFormat("H:mm:ss:SSS");
                cadenaHoraLogs= formatoHoraLogs.format(horaActual);
               
                lblReloj.setText(cadenaHora);
               
                }
        }
       
        private void initComponents() {
                setFont(new Font("Dialog", Font.PLAIN, 12));
                setForeground(Color.black);
                setLayout(new GroupLayout());
                add(getJPanel2(), new Constraints(new Leading(520, 253, 12, 12), new Leading(24, 150, 10, 10)));
                add(getJPanel1(), new Constraints(new Leading(14, 759, 12, 12), new Leading(180, 230, 40, 40)));
                add(getLblReloj(), new Constraints(new Leading(717, 56, 12, 12), new Leading(424, 10, 10)));
                add(getJPanel0(), new Constraints(new Leading(14, 10, 10), new Leading(24, 146, 24, 24)));
                add(getLblMensaje(), new Constraints(new Leading(18, 403, 10, 10), new Bilateral(422, 12, 0)));
                initGrupoRadioButton();
                setSize(790, 450);
        }

       

        private JButton getJButton0() {
                if (btnRetransmision == null) {
                        btnRetransmision = new JButton();
                        btnRetransmision.setText("Retrans");
                }
                return btnRetransmision;
        }

        private JPanel getJPanel2() {
                if (jPanel2 == null) {
                        jPanel2 = new JPanel();
                        jPanel2.setBorder(BorderFactory.createTitledBorder(null, "Secuencias/Checksum",

TitledBorder.LEADING, TitledBorder.DEFAULT_POSITION, new Font("Dialog",
                                        Font.BOLD, 12), new Color(51, 51, 51)));
                        jPanel2.setLayout(new GroupLayout());
                        jPanel2.add(getLblEnviadas(), new Constraints(new Leading(78, 10, 10), new Leading(5,

10, 10)));
                        jPanel2.add(getLblRecibidas(), new Constraints(new Leading(137, 12, 12), new Leading(5,

12, 12)));
                        jPanel2.add(getTxtSecuenciasEnviadas(), new Constraints(new Leading(78, 50, 12, 12), new

Leading(31, 10, 10)));
                        jPanel2.add(getTxtSecuenciasRecibidas(), new Constraints(new Leading(143, 50, 12, 12),

new Leading(31, 12, 12)));
                        jPanel2.add(getTxtChecksumEnviadas(), new Constraints(new Leading(78, 50, 12, 12), new

Leading(57, 12, 12)));
                        jPanel2.add(getTxtChecksumRecibidas(), new Constraints(new Leading(143, 50, 12, 12), new

Leading(59, 10, 10)));
                        jPanel2.add(getJTextField1(), new Constraints(new Leading(183, 40, 10, 10), new

Leading(89, 12, 12)));
                        jPanel2.add(getLblSecuencias(), new Constraints(new Leading(6, 12, 12), new Leading(31,

12, 12)));
                        jPanel2.add(getLblChecksum(), new Constraints(new Leading(6, 12, 12), new Leading(59,

12, 12)));
                        jPanel2.add(getCkChecksum(), new Constraints(new Leading(2, 8, 8), new Leading(85, 8,

8)));
                        jPanel2.add(getBtnRetransmision(), new Constraints(new Leading(92, 86, 12, 12), new

Leading(88, 19, 12, 12)));
                }
                return jPanel2;
        }

        public JLabel getLblMensaje() {
                if (lblMensaje == null) {
                        lblMensaje = new JLabel();
                        lblMensaje.setText(":");
                }
                return lblMensaje;
        }

               
        private JPanel getJPanel1() {
                if (jPanel1 == null) {
                        jPanel1 = new JPanel();
                        jPanel1.setBorder(BorderFactory.createTitledBorder(null, "Recepciones",

TitledBorder.LEADING, TitledBorder.DEFAULT_POSITION, new Font("Dialog",
                                        Font.BOLD, 12), new Color(51, 51, 51)));
                        jPanel1.setLayout(new GroupLayout());
                        jPanel1.add(getJScrollPane0(), new Constraints(new Bilateral(14, 12, 22), new

Bilateral(0, 12, 22)));
                }
                return jPanel1;
        }

        private JScrollPane getJScrollPane0() {
                if (jScrollPane0 == null) {
                        jScrollPane0 = new JScrollPane();
                        jScrollPane0.setViewportView(getJTextArea0());
                }
                return jScrollPane0;
        }

        private JTextArea getJTextArea0() {
                if (taRecepciones == null) {
                        taRecepciones = new JTextArea();
                }
                return taRecepciones;
        }

        public JLabel getLblReloj() {
                if (lblReloj == null) {
                        lblReloj = new JLabel();
                }
                return lblReloj;
        }

        private void initGrupoRadioButton() {
                grupoRadioButton = new ButtonGroup();
                grupoRadioButton.add(getJRadioButton0());
                grupoRadioButton.add(getJRadioButton1());
        }

        private JButton getBtnDesconectar() {
                if (btnDesconectar == null) {
                        btnDesconectar = new JButton();
                        btnDesconectar.setFont(new Font("Dialog", Font.PLAIN, 12));
                        btnDesconectar.setText("Desconectar");
                        btnDesconectar.addActionListener(new ActionListener() {
       
                                public void actionPerformed(ActionEvent event) {
                                        btnDesconectarActionActionPerformed(event);
                                }
                        });
                }
                return btnDesconectar;
        }

        public JButton getBtnEsperar() {
                if (btnEsperar == null) {
                        btnEsperar = new JButton();
                        btnEsperar.setFont(new Font("Dialog", Font.PLAIN, 12));
                        btnEsperar.setText("Esperar");
                        btnEsperar.addActionListener(new ActionListener() {
       
                                public void actionPerformed(ActionEvent event) {
                                        try {
                                                btnEsperarActionActionPerformed(event);
                                        } catch (NumberFormatException e) {
                                                e.printStackTrace();
                                        } catch (IOException e) {
                                                e.printStackTrace();
                                        }
                                }
                        });
                }
                return btnEsperar;
        }

        public JPanel getJPanel0() {
                if (jPanel0 == null) {
                        jPanel0 = new JPanel();
                        jPanel0.setBorder(BorderFactory.createTitledBorder(null, "Conexión",

TitledBorder.LEADING, TitledBorder.DEFAULT_POSITION, new Font("Dialog", Font.BOLD,
                                        12), Color.black));
                        jPanel0.setFont(new Font("Dialog", Font.PLAIN, 12));
                        jPanel0.setLayout(new GroupLayout());
                        jPanel0.add(getJTextField0(), new Constraints(new Leading(58, 112, 10, 10), new

Leading(42, 10, 10)));
                        jPanel0.add(getJLabel1(), new Constraints(new Leading(12, 12, 12), new Leading(69, 10,

10)));
                        jPanel0.add(getJLabel0(), new Constraints(new Leading(29, 10, 10), new Leading(44, 10,

10)));
                        jPanel0.add(getJLabel2(), new Constraints(new Leading(187, 10, 10), new Leading(47, 10,

10)));
                        jPanel0.add(getJLabel3(), new Constraints(new Leading(188, 12, 12), new Leading(78, 10,

10)));
                        jPanel0.add(getBtnDesconectar(), new Constraints(new Leading(360, 115, 10, 10), new

Leading(72, 23, 10, 10)));
                        jPanel0.add(getJTextField5(), new Constraints(new Leading(252, 88, 12, 12), new

Leading(75, 12, 12)));
                        jPanel0.add(getJRadioButton0(), new Constraints(new Leading(58, 8, 8), new Leading(3,

10, 10)));
                        jPanel0.add(getJRadioButton1(), new Constraints(new Leading(158, 10, 10), new Leading(3,

8, 8)));
                        jPanel0.add(getJTextField2(), new Constraints(new Leading(252, 89, 12, 12), new

Leading(42, 12, 12)));
                        jPanel0.add(getJTextField4(), new Constraints(new Leading(57, 114, 12, 12), new

Leading(75, 12, 12)));
                        jPanel0.add(getBtnEsperar(), new Constraints(new Bilateral(359, 12, 78), new Leading(41,

22, 12, 12)));
                }
                return jPanel0;
        }

       

        private JRadioButton getJRadioButton1() {
                if (rbCliente == null) {
                        rbCliente = new JRadioButton();
                        rbCliente.setFont(new Font("Dialog", Font.PLAIN, 12));
                        rbCliente.setText("Cliente");
                        rbCliente.addActionListener(new ActionListener() {
       
                                public void actionPerformed(ActionEvent event) {
                                        rbClienteActionActionPerformed(event);
                                }
                        });
                }
                return rbCliente;
        }

        public JRadioButton getJRadioButton0() {
                if (rbServidor == null) {
                        rbServidor = new JRadioButton();
                        rbServidor.setFont(new Font("Dialog", Font.PLAIN, 12));
                        rbServidor.setSelected(true);
                        rbServidor.setText("Servidor");
                        rbServidor.addActionListener(new ActionListener() {
       
                                public void actionPerformed(ActionEvent event) {
                                        rbServidorActionActionPerformed(event);
                                }
                        });
                }
                return rbServidor;
        }

       
        private static void installLnF() {
                try {
                        String lnfClassname = PREFERRED_LOOK_AND_FEEL;
                        UIManager.setLookAndFeel(lnfClassname);
                } catch (Exception e) {
                        System.err.println("Cannot install " + PREFERRED_LOOK_AND_FEEL
                                        + " on this platform:" + e.getMessage());
                }
        }

        /**
         * Main entry of the class.
         * Note: This class is only created so that you can easily preview the result at runtime.
         * It is not expected to be managed by the designer.
         * You can modify it as you like.
         */

        public static void main(String[] args) {
                installLnF();
                SwingUtilities.invokeLater(new Runnable() {
                        @Override
                        public void run() {
                       
                                MyClase frame = new MyClase();
                                frame.setDefaultCloseOperation(MyClase.EXIT_ON_CLOSE);
                                frame.setTitle("MyClase");
                                frame.getContentPane().setPreferredSize(frame.getSize());
                                frame.pack();
                                frame.setLocationRelativeTo(null);
                                frame.setVisible(true);
                               
                        }
                });
       
        }

        private void rbServidorActionActionPerformed(ActionEvent event) {
               
                tipoConexion();
       
        }

        private void rbClienteActionActionPerformed(ActionEvent event) {

                tipoConexion();
        }

        private void btnEsperarActionActionPerformed(ActionEvent event) throws NumberFormatException,

IOException {
               
                tipoConexion();
               
                if(tipoConeccion.equalsIgnoreCase("Servidor")){
                        long retransmision=0L;
                        MyClase.this.setTitle("Esperando...");
                        rbServidor.setEnabled(false);
                        rbCliente.setEnabled(false);
                        btnEsperar.setText("Esperando");
                        btnDesconectar.setEnabled(true);
                        btnDesconectar.setText("Detener");
                        btnEsperar.setEnabled(false);
                       
                       
       
                        try{
                                retransmision=Integer.parseInt(txtRetransmision.getText());
                        }catch(Exception e){

                               
                        }
                       
                        new ConexionServidor(12345,retransmision);
                       
                       
                }else if(tipoConeccion.equalsIgnoreCase("Cliente")){
                       
                        MyClase.this.setTitle("Conectandose");
                        btnEsperar.setText("Conectando");
                        btnEsperar.setEnabled(false);
                        btnDesconectar.setEnabled(true);
                        btnDesconectar.setText("Detener");
                        rbServidor.setEnabled(false);
                        rbCliente.setEnabled(false);
                       
                        new Cliente(Integer.parseInt(
12345,"127.0.0.1");
                       
                }      
               
        }

        public void btnDesconectarActionActionPerformed(ActionEvent event) {

                tipoConexion();
                if(tipoConeccion.equalsIgnoreCase("Servidor")){
                        MyClase.this.setTitle("Deteniendo servidor...");
                        btnEsperar.setEnabled(true);
                        btnEsperar.setText("Esperar");
                        rbServidor.setEnabled(true);
                        rbCliente.setEnabled(true);
                        btnDesconectar.setEnabled(false);
                       
                        try{
                        ConexionServidor descon=new ConexionServidor();
                        descon.cerrarConexion();
                       
                               
                        }catch(Exception e){
                                log.error("Error al intentar cerrar conexión en servidor");
                                e.printStackTrace();
                        }
       
                       
                }else if(tipoConeccion.equalsIgnoreCase("Cliente")){
                        MyClase.this.setTitle("Desconectando...");
                        btnEsperar.setEnabled(true);
                        btnEsperar.setText("Conectar");
                        btnDesconectar.setText("Desconectar");
                        btnDesconectar.setEnabled(false);
                        rbServidor.setEnabled(true);
                        rbCliente.setEnabled(true);
                       
                        Cliente nuevoCliente= new Cliente();
                        nuevoCliente.cerrarCliente();
                }
        }
       
       
        public String tipoConexion(){

                if(rbServidor.isSelected()){
                       
                        lblMensaje.setText("Está en modo Servidor");
                        MyClase.this.setTitle("MyClase");
                        btnEsperar.setText("Esperar");
                        tipoConeccion="Servidor";
                       

                }else if(rbCliente.isSelected()){
                       
                        lblMensaje.setText("Está en modo Cliente");
                        MyClase.this.setTitle("MyClase");
                        btnEsperar.setText("Conectar");
                        tipoConeccion="Cliente";
                       
                }
               
                return tipoConeccion;
        }
       
       
        //método que muestra los mensajes en el formulario. parámetro que viene de otra clase.
        public void mostrarMensajes (String mensaje){ //---en este metodo trato de mostrar el mens.            
                lblMensaje.setText(mensaje);
                validate();
                       
        }
       
       
        private void btnRetransmisionActionActionPerformed(ActionEvent event) {
               
                ConexionServidor conexion= new ConexionServidor();
                conexion.retransmisionManual();
        }

       

}

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:

SwingUtilities.invokeLater(new Runnable(){
        @Override public void run() {
                textField.setText("valor");
        }
});

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...

Imagen de OscarRyz

No leí todo el post pero

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

import javax.swing.*;
import java.awt.event.*;
class Test {
  public static void main( String ... args ) {
 
     final JLabel label = new JLabel();
 
     // actualizar el label
     ActionListener listener = new ActionListener(){
        public void actionPerformed( ActionEvent e ) {
           label.setText( new java.util.Date().toString() );
        }
      };
      JButton button = new JButton();
      button.addActionListener( listener );
       // presentarlos
      JPanel panel = new JPanel();
      panel.add( label );
      panel.add( button);
      // mostrar el frame
      JFrame frame = new JFrame();
      frame.add( panel );
      frame.setVisible( true );
   }
}

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í:
http://docs.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html
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:

                public void actionPerformed(final java.awt.event.ActionEvent e) {
//Lo del SwingWorker se hace porque swing no es segura para hilos
//con lo que hay que dividir entre el trabajo realizado en la
//interfaz gráfica y el de proceso (BBDD en nuestro caso)
//Todo esto se explica en la propia clase SwingWorker
//Estoy usando el SwinmgWorker de java
                                        SwingWorker task=new SwingWorker<Void,String>(){

                                                 @Override
                                                protected Void doInBackground()throws Exception{

                                                        if (e.getSource() == MiApplet.this.getJButton1()){
                                                                int result=javax.swing.JOptionPane.showConfirmDialog(MiApplet.this,"Está seguro de dar de alta al individuo sobre el que ha rellenado los campos.\nResponda Sí o No", "Dar de alta", javax.swing.JOptionPane.YES_NO_OPTION);
                                                                if(result==javax.swing.JOptionPane.YES_OPTION){
                                                                        publish("Dando de alta el empleado");
                                                                        connEtoM7(e);
                                                                        publish("Empleado dado de alta");
                                                                }
                                                                else
                                                                        publish("Alta cancelada por el usuario");
                                                        }

                                                @Override
                                                protected void process(List<String> lista) {
                                                        for (String cad : lista) {
                                                                getEtiqueta().setText("Estado: "+cad);
                                                        }
                                                }

                                        };
                                        task.execute();
                };

 <blockcode>

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í:
http://docs.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html
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:
<code>
                public void actionPerformed(final java.awt.event.ActionEvent e) {
//Lo del SwingWorker se hace porque swing no es segura para hilos
//con lo que hay que dividir entre el trabajo realizado en la
//interfaz gráfica y el de proceso (BBDD en nuestro caso)
//Todo esto se explica en la propia clase SwingWorker
//Estoy usando el SwinmgWorker de java
                                        SwingWorker task=new SwingWorker<Void,String>(){

                                                 @Override
                                                protected Void doInBackground()throws Exception{

                                                        if (e.getSource() == MiApplet.this.getJButton1()){
                                                                int result=javax.swing.JOptionPane.showConfirmDialog(MiApplet.this,"Está seguro de dar de alta al individuo sobre el que ha rellenado los campos.\nResponda Sí o No", "Dar de alta", javax.swing.JOptionPane.YES_NO_OPTION);
                                                                if(result==javax.swing.JOptionPane.YES_OPTION){
                                                                        publish("Dando de alta el empleado");
                                                                        connEtoM7(e);
                                                                        publish("Empleado dado de alta");
                                                                }
                                                                else
                                                                        publish("Alta cancelada por el usuario");
                                                        }

                                                @Override
                                                protected void process(List<String> lista) {
                                                        for (String cad : lista) {
                                                                getEtiqueta().setText("Estado: "+cad);
                                                        }
                                                }

                                        };
                                        task.execute();
                };

<blockcode>

Si tienes una versión anterior al java 6 puedes copiar y pegar el código siguiente para hacer tu SwingWorker siguiente:

<code>
package packswingworker;

//import javax.swing.SwingUtilities;
import javax.swing.SwingUtilities;
/**
 * This is the 3rd version of SwingWorker (also known as
 * SwingWorker 3), an abstract class that you subclass to
 * perform GUI-related work in a dedicated thread.  For
 * instructions on using this class, see:
 *
 * <a href="http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html
" title="http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html
">http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html
</a> *
 * Note that the API changed slightly in the 3rd version:
 * You must now invoke start() on the SwingWorker after
 * creating it.
 */

public abstract class SwingWorker {
        private Object value;  // see getValue(), setValue()
        private Thread thread;

        /**
         * Class to maintain reference to current worker thread
         * under separate synchronization control.
         */

        private static class ThreadVar {
                private Thread thread;
                ThreadVar(Thread t) { thread = t; }
                synchronized Thread get() { return thread; }
                synchronized void clear() { thread = null; }
        }

        private ThreadVar threadVar;

        /**
         * Start a thread that will call the construct method
         * and then exit.
         */

        public SwingWorker() {
                final Runnable doFinished = new Runnable() {
                   public void run() { finished(); }
                };

                Runnable doConstruct = new Runnable() {
                        public void run() {
                                try {
                                        setValue(construct());
                                }
                                finally {
                                        threadVar.clear();
                                }

                                SwingUtilities.invokeLater(doFinished);
                        }
                };

                Thread t = new Thread(doConstruct);
                threadVar = new ThreadVar(t);
        }
        /**
         * Compute the value to be returned by the get method.
         */

        public abstract Object construct();
        /**
         * Called on the event dispatching thread (not on the worker thread)
         * after the construct method has returned.
         */

        public void finished() {
        }
        /**
         * Return the value created by the construct method.  
         * Returns null if either the constructing thread or the current
         * thread was interrupted before a value was produced.
         *
         * @return the value created by the construct method
         */

        public Object get() {
                while (true) {  
                        Thread t = threadVar.get();
                        if (t == null) {
                                return getValue();
                        }
                        try {
                                t.join();
                        }
                        catch (InterruptedException e) {
                                Thread.currentThread().interrupt(); // propagate
                                return null;
                        }
                }
        }
        /**
         * Get the value produced by the worker thread, or null if it
         * hasn't been constructed yet.
         */

        protected synchronized Object getValue() {
                return value;
        }
        /**
         * A new method that interrupts the worker thread.  Call this method
         * to force the worker to stop what it's doing.
         */

        public void interrupt() {
                Thread t = threadVar.get();
                if (t != null) {
                        t.interrupt();
                }
                threadVar.clear();
        }
        /**
         * Set the value produced by worker thread
         */

        private synchronized void setValue(Object x) {
                value = x;
        }
        /**
         * Start the worker thread.
         */

        public void start() {
                Thread t = threadVar.get();
                if (t != null) {
                        t.start();
                }
        }
}

<blockcode>

LUEGO puedes poner en tu código:

<code>
public void onCargarActionPerformed() {
       
        SwingWorker sWorker=new SwingWorker()
        {
                Vector inventario=new Vector();
                Throwable th=null;
                public Object construct()
                {
                        try
                        {
                                System.out.println("Obteniendo de la BBDD");
                                //Cambia esta línea por el trabajo a realizar que no sea de la interfaz Swing
                                inventario=ConsultorBD.obtenerInventario();
                                System.out.println("Obtenidos de la BBDD");
                        }
                        catch(Throwable th1)
                        {
                                th=th1;
                        }
                        return null;
                }
                public void finished()//Cargamos los datos(o sea se ejecuta esto) cuando se pulsa el botón
                {
                        try{
                                if(th==null)//No ha habido excepcion al construir
                                {
                                        System.out.println("Mostrando en la tabla");
                                        //Cambia las dos líneas siguientes por tu JLabel.setText("Texto a cambiar")
                                        getModeloTabla1().setInventario(inventario);
                                        getModeloTabla1().publicoFireTableDateChanged();
                                        System.out.println("Mostrados en la tabla");
                                }
                                else
                                {
                                        System.err.println("ERROR EN FINISHED DE SWINGWORKER");
                                        System.err.println(th.getMessage());
                                }
                        }
                        catch(Throwable th2)
                        {
                                th2.printStackTrace();
                        }

                }
        };
        sWorker.start();
}
<blockcode>

TODO ESTO PARA CAMBIAR UN SIMPLE TEXTO DE UN JLABEL, PERO ASÍ SON LAS COSAS.