Encuesta

¿Cuál es tu interés en ejecutar lenguajes distintos de Java en la máquina virtual Java?

01-12-2008 - 193 votos

(1)

Tutorial de Multitarea en Swing por José María Vegas

21/07/2008 11:30 ecamacho

José María Vegas (jomaverg) nos ha enviado este interesante tutorial sobre el uso correcto de los  threads en una aplicación Swing. En el tutorial, José María nos da un par de reglas para usar de forma correcta Swing a la vez que nos explica a detalle la razón de dichas reglas.

Copio y pego de la introducción:

"En  las aplicaciones Java que usan Swing es particularmente importante manejar con cuidado  la concurrencia. Una aplicación Java que usa Swing y que está bien desarrollada usa la concurrencia para
crear una  interfaz de usuario que nunca se bloquea,  de modo que  la aplicación siempre es capaz de  responder  a  la  interacción del usuario en un momento dado con  independencia de  las tareas que esté llevando a cabo la aplicación en ese momento. Para desarrollar una aplicación que tiene esta capacidad de respuesta, el desarrollador debe aprender cómo Swing emplea los hilos. "
Volver a actualidad

Etiquetas: j2se, Swing

Comentarios: 19

  • peyrona 21/07/2008 15:27

    Muchas por compartir tu conocimiento, por el tiempo y el esfuerzo dedicado a crear este tutorial.

  • Anónimo 21/07/2008 15:28

    jomaverg, muchas gracias por abrirnos los ojos a los que no dominamos Java, a cuestiones que en algunos momentos son auténticos rompecabezas para nosotros. Cuando alguien con ideas claras te acerca su visión de la jugada, dan ganas de seguir adelante aprendiendo.
    ecamacho, le agradezco que haya considerado interesante publicar esta noticia. Humildemente le pido haga lo posible para que florezcan pequeños tutoriales como este.
    Sabovi 
     
     

  • harpon 21/07/2008 15:56

    Muy buen tutorial :D

  • infoeduardo 21/07/2008 16:46

    Es un tutoria imprendiscible para el desarrollo de aplicaciones SWING

     

    infoeduardo

  • grios 21/07/2008 18:47

    Excelente tutorial... me ha aclarado la forma correcta de trabajar con componentes SWING.

    Hasta ahora venia teniendo la práctica  (no sé si mala) de emplear threads 'normales' para tareas pesadas pero no tenia idea de el uso de la interfaz SwingWorker y su utilidad.

    El ejemplo más basico de esto, una barra de progreso que se actualiza mientras ocurre un ciclo de 1 a 100,000.

     

    Saludos!!!

     

    Grios

  • dmolano 22/07/2008 11:10

    Te agradezco el tiempo empleado en ordenar estos conocimientos, y después ponerlos al alcance de todos.

    Este documento es imprescindible para comenzar a programar en Swing correctamente.

    Quien no tenga estos conceptos básicos claros, va "de culo, cuesta abajo y sin freno", si quiere hacer cualquier cosa decente en Swing.

    Gracias.

  • Anónimo 22/07/2008 16:58

    Tengo una duda.

    Si hago lo siguiente, ¿esta bien o mal?.

    class Ventana extends JFrame implements Runnable

    {

    public Ventana()

    {

    }

    public void start()

    {

    }

    public void run()

    {

    }

    public static void main(String[] args)

    {

    Ventana v=new Ventana();

    v.start();

    v.setVisible(true);

    }

    }

    Saludos.

  • jomaveger 22/07/2008 22:34

    Hola a todos. Gracias a vosotros, la verdad es que no me esperaba tan buena acogida y me habéis emocionado.

    Hola Anónimo. Con la información que proporcionas, creo entender que quieres que tu clase Ventana sea ejecutada en un hilo propio. No lo veo apropiado, ten en cuenta que en el EDT (Event Dispatching Thread) han de realizarse todas las operaciones relacionadas con Swing y las operaciones largas se realizan en el SwingWorker ya que éste prorporciona los mecanismos para compartir automáticamente datos entre los dos hilos.

    Por otra parte, dentro de tu planteamiento, aunque implementes Runnable, si mal no recuerdo no hace falta implementar start(), sino que creas un objeto Thread pasándole como parámetro la clase Ventana y ejecutas el método start() sobre ese objeto.

    Saludos cordiales.

  • peyrona 23/07/2008 12:23

    Bueno, jomaveger, como fui el primero en gradecerte que compartieses tu trabajo, permíeteme que te haga una sugerencia: amplía un poco, con alguna iagen si es posible, la parte de SwingWorker.

    Otra sugenrencia, podrías añadir algunos links a herramientas que ayudan a "limpiar"Swin, como estos:

    http://www.denova.com/Detangler/

    https://swingexplorer.dev.java.net/

    Muchas gracias otra vez y un saludo, compañero.

  • jomaveger 23/07/2008 12:53

    Hola peyrona. Muchas gracias por las sugerencias, las críticas constructivas siempre son bienvenidas. Sobre lo de la imagen, llevas razón, lo estudiaré. Y sobre las herramientas, pues no las conocía y lo cierto es que tienen muy buena pinta.

    Gracias de nuevo y un saludo cordial para ti.

  • rikidpr 23/07/2008 13:02

    Muchas gracias!! Es un tutorial basico para hacer aplicaciones Swing y no morir en el intento.

  • greeneyed 23/07/2008 18:12

    Y si puedes colgar una version web para que los buscadores lo indexen facil y los aprendices de Swing lo encuentren fácil, mejor. Si los buscadores indexan tambien PDFs, pero por muy ISO que sea ahora, siguen sin gustarme los PDFs donde una página vale :).

    Gracias

  • Anónimo 25/07/2008 04:28

    Gracias, soy el anonimo del codigo de arriba.

  • Anónimo 25/07/2008 12:36

    Buscando un "backport" a la clase SwingWorker (quería reconstruir el ejemplo para jdk150) encontré el siguiente proyecto:

    https://swingworker.dev.java.net/

    Y ahí se incluye una demo en mi opinión más eficiente que la del tutorial (mientras se generan los numeros primos se van mostrando, y a la par, actualizando la barra de progreso).

     Saludos.

  • rogerjose81 25/07/2008 16:54

    Muchísimas Gracias José María!

    Me has ayudado a reforzar conocimientos en una de las dos cosas que mas me agrada del Desarrollo de Software ;)

    Saludos cordiales.

  • jomaveger 25/07/2008 21:15

    Gracias por vuestros comentarios, y tomo nota de vuestras sugerencias.

    Saludos cordiales.

  • Anónimo 31/07/2008 16:36

    Enhorabuena!! me alegro que te hayan publicado el tutorial!;) es todo un detalle por tu parte,y se nota que has tenido que dedicar mucho tiempo para hacer este tutorial!además esta claro que has ayudado a muchas personas con él!me alegro mucho.

    Ahora a disfrutar del verano!!:D

    la pelirroja:P

  • jomaveger 01/08/2008 01:05

    Muchas gracias pelirroja :P, no me lo esperaba!!! :D

  • Anónimo 11/09/2008 19:08

    HOLA, primero que nada agradecerte por el tiempo y esfuerzo que le pones para compartir tu conocimiento; mi nombre es jesus(jesusitotej-upt@yahoo.es) voy aprendiendo java y me parece muy interesante. La idea de multitareas usando hilos(thread) ya la entendí leyendo tu PDF, el asunto es como implementarla.

    PREGUNTO:

    public void actionPerformed(ActionEvent e) {

    1) Esta instruccion captura todos los clicks de todos los botones

    existentes en el formulario?

    2) Y captura los eventos click de otros controles como spinner, checks, optiongroup...???

    3) En el siguiente ejemplo cuales son los errores y que debo modificar para implementar EDT (HDE) segun tu perspectiva.

    Es un spinner que cuando cambia su valor, un label te muestra si el número es o no primo.

    CODIGO:(NetBeans)

    private void spnDatoStateChanged(javax.swing.event.ChangeEvent evt) {                                    
            int min=1,max=100,num=0;
            num=Integer.parseInt(spnDato.getValue().toString());
            // Límites del spinner
            if (num        if (num>max) spnDato.setValue(100);
            // funcion booleana definida previamente para hallar si es primo
            if (esprimo(num)){
                lblResp.setText("Es Primo");
            }else{
                lblResp.setText("No es Primo");           
            }
        }

        public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new spinner().setVisible(true);
                }
            });
        }

Escribe tu comentario

Sun Microsystem Logo NHT-Norwick Logo

© 2002-2007 Asociación javaHispano