Ver Mensaje Individual
  #16 (permalink)  
Antiguo 10/08/2014, 04:22
Avatar de chuidiang
chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: Hilo isRunning()

Hola:

Te pego lo que creo que quieres hacer. La primera clase (PruebaContador) es la ventana principal con el boton que lanza el contador y tiene el código que quieres que espere. La segunda clase es el dialogo contador (le he puesto JDialog porque es más correcto que JFrame para ventanas secundarias). Lo he comentado y creo que se entiende, ya me diras si va.

Código Java:
Ver original
  1. package com.chuidiang.ejemplos.swing;
  2.  
  3. import java.awt.FlowLayout;
  4. import java.awt.event.ActionEvent;
  5. import java.awt.event.ActionListener;
  6.  
  7. import javax.swing.JButton;
  8. import javax.swing.JFrame;
  9.  
  10. public class PruebaContador extends JFrame implements ActionListener {
  11.  
  12.    private static final long serialVersionUID = -3776504819992272375L;
  13.  
  14.    public static void main(String[] args) {
  15.       new PruebaContador();
  16.    }
  17.  
  18.    public PruebaContador() {
  19.       setLayout(new FlowLayout());
  20.       JButton boton = new JButton("Pulsame");
  21.       boton.addActionListener(this);
  22.       getContentPane().add(boton);
  23.       pack();
  24.       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  25.       setLocationRelativeTo(null);
  26.       setVisible(true);
  27.    }
  28.    
  29.    public void actionPerformed(ActionEvent arg0) {
  30.      
  31.       // Se lanza todo en un hilo para evitar bloquear el hilo de
  32.       // despacho de eventos de java (EDT). Si no se hace así, no
  33.       // se verá progresar el dialogo contador y se quedara bloqueada
  34.       // toda la interfaz de usuario hasta que termine el contador.
  35.       Thread hiloQueEvitaBloquearEDT = new Thread() {
  36.          public void run() {
  37.  
  38.             DialogoContador dialogoContador = new DialogoContador(
  39.                   PruebaContador.this);
  40.            
  41.             Thread hilo = new Thread(dialogoContador);
  42.             hilo.start();
  43.            
  44.             // Espera a que termine el hilo contador
  45.             try {
  46.                hilo.join();
  47.             } catch (InterruptedException e) {
  48.                e.printStackTrace();
  49.             }
  50.            
  51.             // Codigo que no se ejecuta hasta que se termine el contador
  52.             System.out.println("Sigue la ejecucion");
  53.          }
  54.  
  55.       };
  56.       hiloQueEvitaBloquearEDT.start();
  57.    };
  58.  
  59. }

Y el dialogo contador

Código Java:
Ver original
  1. package com.chuidiang.ejemplos.swing;
  2.  
  3. import java.awt.Frame;
  4.  
  5. import javax.swing.JDialog;
  6. import javax.swing.JLabel;
  7.  
  8. public class DialogoContador extends JDialog implements Runnable {
  9.    private static final long serialVersionUID = 4898321869557863294L;
  10.    private JLabel label = new JLabel();
  11.    private int contador = 20;
  12.  
  13.    public DialogoContador(Frame parent) {
  14.       // Pasando el frame principal como parent, se evita que el dialogo
  15.       // contador se vaya detras de la ventana principal.
  16.       super(parent);
  17.       label.setText(Integer.toString(contador));
  18.       add(label);
  19.       pack();
  20.    }
  21.  
  22.    public void run() {
  23.       setVisible(true);
  24.  
  25.       // Bucle contador
  26.       while (contador > 0) {
  27.          try {
  28.             Thread.sleep(500);
  29.             contador--;
  30.             label.setText(Integer.toString(contador));
  31.          } catch (InterruptedException e) {
  32.             e.printStackTrace();
  33.          }
  34.  
  35.       }
  36.  
  37.       setVisible(false);
  38.    }
  39. }

Se bueno.
__________________
Apuntes Java
Wiki de Programación