Búsqueda por palabras claves

No se olviden de consultar por palabras claves! Ejemplo de Estructura de datos en java, tutorial de estructura de datos
Búsqueda personalizada
Mostrando entradas con la etiqueta entorno gráfico java. Mostrar todas las entradas
Mostrando entradas con la etiqueta entorno gráfico java. Mostrar todas las entradas

jueves, 31 de mayo de 2012

Este ejercicio hace la simulación de un formulario que hace una consulta, la cual se demora en la "búsqueda" por lo que aparenta que el formulario está colgado pues una vez presionado el botón no podemos seleccionar ningún elemento del ComboBox.

package hilos2;


import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComboBox;

/**
 *
 * @author PauloGT
 */
public class Ventana extends Frame {
 
private JButton boton;
   private JComboBox combo;
   
   public Ventana(){
     setLayout(new FlowLayout());
     add(boton=new JButton("Este duerme el proceso: "));
     boton.addActionListener(new EscuchaBoton());
    add(combo=new JComboBox());
    combo.addItem("Item 1");
    combo.addItem("Item 1");
    combo.addItem("Item 1");
    setSize(300,300);
   
   }
   
   class EscuchaBoton implements ActionListener{

 @Override
 public void actionPerformed(final ActionEvent arg0) {
   
    // Simulación de que hace la consulta y se demora
    try {
    Thread.sleep(10000);
     System.out.println("Finalizo el proceso.. ");
   } catch (final InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
 }
   }
}

El main de nuestra aplicación sería:

public static void main(String[] args) {
        // TODO code application logic here
        Ventana obj=new Ventana();
        obj.setVisible(true);
     
    }
Para Solucionar este tipo de problemas debemos usar hilos, por lo que necesitamos simplemente cambiar el código de nuestro programa de la siguiente manera:
package hilos2;


import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;


/**
 *
 * @author PauloGT
 */
public class Ventana_1 extends Frame {
 
private JButton boton;
   private JComboBox combo;
   
   public Ventana_1(){
     setLayout(new FlowLayout());
     add(boton=new JButton("Este duerme el proceso: "));
     boton.addActionListener(new EscuchaBoton());
    add(combo=new JComboBox());
    combo.addItem("Item 1");
    combo.addItem("Item 1");
    combo.addItem("Item 1");
    setSize(300,300);
   
   }
   
   class EscuchaBoton implements ActionListener{

 @Override
 public void actionPerformed(final ActionEvent arg0) {
   
    
   boton.setEnabled(false);
                        TareaBoton t=new TareaBoton();  // Creamos una instancia de la clase Hilo que creamos
                        t.start(); // ejecutamos el hijo
  
 }
    
   }
   
   class TareaBoton extends Thread{    
     // creamos una innerclass que derive de los Hilos y manejamos todo lo que deseamos realizar en el método run.
       public void run(){
    
           try {
  Thread.sleep(10000);
  System.out.println("Finalizo el proceso.. ");
  } catch (final InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
      }
   
   }
}


Con esto nuestra aplicación no tendrá el problema de que aparenta estar congelado!!! Cualquier novedad pueden hacer sus comentarios.