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 ?
Dúvida método run() retornar valores para outra classe
8 Respostas
Resumindo: eu quero jogar o valor da thread para outra classe onde está o meu JtextField.
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.
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();
Mas é melhor fazer com o Timer do Swing:
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
Basta adaptar o programa que te passei.
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
Não tem como receber o valor da Thread em outra classe para ser exibido em um textField ? Mas que os segundos fiquem atualizando …