Dúvida método run() retornar valores para outra classe

8 respostas
F

Pessoal, estou fazendo um programinha… tenho a Classe1 onde possui o método Run com contador Thread.sleep(1000);
como faço para retornar esses segundos para a outra classe do forme onde será setado esse segundos em um JtextField ?

8 Respostas

F

Resumindo: eu quero jogar o valor da thread para outra classe onde está o meu JtextField.

ViniGodoy

Ou você passa seu JTextField como parâmetro para o seu Runnable.
Ou vc implementa o padrão observer no seu Runnable, e faz o form que o contém observa-lo.

Lembre-se também que para atualizar componentes do Swing a partir de outras threads é necessário usar o comando EventQueue.invokeLater.

F

Veja como ta.

Classe contendo aThread

public class teste extends Thread{

  //Variaveis.
     int entradaCampo1 = 0,entradaCampo2 = 0, contador = 0, total = 0;
     String campoSegundos1 = "", campoSegundos2 = "";



    public void calcular(String horas, String minutos) throws Exception{

    try{
   /*Horas*/ entradaCampo1 = 3600 * Integer.parseInt(horas);

        }catch(NumberFormatException b){

            if(horas == null || horas.equals("")){
                entradaCampo1 = 0;
            }
        }

    try{
         /*Minutos*/entradaCampo2 = 60 * Integer.parseInt(minutos);
    }catch(NumberFormatException c){

        if(minutos == null || minutos.equals("")){
           entradaCampo2 = 0;
        }
    }
   contador = entradaCampo1 + entradaCampo2;
    }

   //Inicia o Thread.sleepp(); <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<------------

     @Override
    public void run() {
        while (contador > 0) {
            try {
                
                Thread.sleep(1000);

            } catch (InterruptedException ex) {
                /**
                 * Caso ocorra Exception
                 */
                ex.printStackTrace();
            }
            /**
             * Decresce o contador
             */
            contador--;
            /**
             * Atualiza o JTextField
             */
            System.out.println(contador);
            if(contador == 0){
                try {
                    Runtime.getRuntime().exec("calc.exe");
                } catch (IOException ex) {

                }
            }
        }
    }


 
}

-------------------------------------------------------------------------------------------------------------------

Classe contendo o form.

teste te = new teste();
            te.calcular(campo1.getText(), campo2.getText());
            te.start();

ViniGodoy


Mas é melhor fazer com o Timer do Swing:

F

Esqueci de dizer… no meu programa o usuário vai digitar a quantidade de horas e o programa transforma para segundos… ai nesses segundos será iniciada Thread decrementando. so que eu tenho que exibir esse decremento no textfield

ViniGodoy

Basta adaptar o programa que te passei.

F

mas não tem outra forma ? ai ele ta capturando as horas ne isso? o que eu quero é que o usuário digite 1 hora (mas ele não está dizendo que é 1 da tarde ou madrugada e sim 1 hora depois que ele digitou aquilo… então eu queria fazer com o sleep mesmo

F

Não tem como receber o valor da Thread em outra classe para ser exibido em um textField ? Mas que os segundos fiquem atualizando …

Criado 19 de fevereiro de 2011
Ultima resposta 20 de fev. de 2011
Respostas 8
Participantes 2