Duas janelas concorrentes

5 respostas
F

Ola pessoal, estou querendo fazer o seguinte:

Em uma janela quando o usuário clicar em um botão irá executar um determinado método.

Só que antes de executar este método quero abrir um JDialog que conterá um texto de aguarde. Ao acabar o método fecho a janela.

Ou seja quero que execute este método e ao mesmo tempo execute o JDialog. Daí pensei Thread.

Fiz da seguinte forma: criei uma classe Thread que abre o JDialog. Antes de executar o método eu starto a Thread e após o método eu do um interrupt na Thread.

Só que não esta funcionando, quando executo a Thread abre o JDialog porem some tudo de dentro. Mas se eu executar separadamente ta tudo ok. Alguem pode me ajudar?

5 Respostas

Andre_Rosa

Poste aqui como você está fazendo.

F

Tem o JDialog, criado usando o netbeans, não coloquei o codigo pois o netbeans gera um bocado de coisa.

A classe Thread:

public class TesteThread extends Thread{

    
    private Aguarda a;
    public TesteThread(Frame frame){

        a = new Aguarda(frame,true);
    }
    @Override
     public void run() {
        a.setVisible(true);
        
     }

    @Override
    public void interrupt() {
        super.interrupt();
        a.dispose();
    }

Na janela principal faço assim:

TesteThread tt = new TesteThread(this);// Fiz também sem associar um Frame no outro e tb não funcionou, ou seja, sem esse this.
 tt.start();
 meuMetodo();
 tt.interrupt();

E ai alguem pode me ajudar?

R

usar interrupt em thread não é aconselhavel e deve ser evitado

use uma sinalização ao invés disso

faça o seguinte: crie o thread e uma variável que irá dizer se ele finaliza ou não.. e no método principal, ao acabar seu método vc da um stop na thread... algo assim:

public class TesteThread extends Thread{  
  
      
    private boolean stop = true;

    public TesteThread(Frame frame){  
  
        a = new Aguarda(frame,true);  
    }  
    @Override  
     public void run() {  
        a.setVisible(true);  
        
        while ( !stop) {
           sleep(300);
        }  
     } 

     public void stop() {
         stop = true;
     } 
}

// e no principal...
tt.start();  
meuMetodo();  
tt.stop();
F

Não funcionou do mesmo jeito. :frowning:
E acho que não esta sendo executado os o processo da janela principal, apesar de startar uma Thread.

Alguem pode me ajudar?

R

que tal escrever algo mais elaborado?

vc não precisa passar o frame para a thread, vc pode criar um frame dentro dela mesmo
ta em outra classe? então da um new na jdialog
simples

tem um exemplo de thread aqui.. siga esse conceito.. lembre-se que ao invés de usar interrupt, deixe a thread terminar por conta própria, nunca use interrupt na vida

public class MultiThread {  
  
  public static void main( String [] args ) {  
  
    TesteThread t1 = new TesteThread(  );  
    TesteThread t2 = new TesteThread(  );  
    TesteThread t3 = new TesteThread(  );  
  
    t1.setName( "Thread 1: " );  
    t2.setName( "Thread 2: " );  
    t3.setName( "Thread 3: " );  
  
    t1.setSlp( 100 );  
    t2.setSlp( 150 );  
    t3.setSlp( 50 );  
  
    t1.start();  
    t2.start();  
    t3.start();  
  
  }  
  
}  
  
class TesteThread extends Thread {  
  static int i;  
  int slp;  
  
  public void setSlp( int slp ) {  
    this.slp = slp;  
  }  
  
  public void run() {  
  
    try {  
  
      for ( int z = 0; z < 10; z++ ) {  
        this.sleep( slp );  
        System.out.println( getName() + z );  
      }  
  
    } catch( InterruptedException e ) {  
  
      e.printStackTrace();  
  
    }  
  }  
}
Criado 18 de junho de 2011
Ultima resposta 19 de jun. de 2011
Respostas 5
Participantes 3