Existe alguma outra maneira de substituir laço de repetição ocioso!?
No método iniciarTeste eu tenho um do{...}while que não faz nada, ele aguarda até uma tarefa se cumprir num prazo de 12 minutos...
Alguém pode me dar algum auxílio!?
Obrigado
packagemodelo;importjava.util.logging.Level;importjava.util.logging.Logger;importjavax.swing.JOptionPane;importjavax.swing.Timer;/** *@author Alex */publicclassTeste{privateAnaliseDadosanaliseDados;privateTimercronometro;publicTeste(EsteiraEletricaee){analiseDados=newAnaliseDados(ee);cronometro=newTimer(30000,analiseDados);}publicvoidiniciarTeste(){cronometro.start();do{//Não faz nada, aguardo os eventos gerados pela//classe AnaliseDados, que implementa a interface ActionListener}while(analiseDados.valor<=2);cronometro.stop();JOptionPane.showMessageDialog(null,"O teste foi concluído com sucesso!");analiseDados.gerarArqTexto();}publicintcancelarTeste(){Object[]opcaoBotao={"SIM","NÃO"};intresposta=JOptionPane.showOptionDialog(null,"Você deseja realmente cancelar o teste?","CANCELAR TESTE",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,null,opcaoBotao,opcaoBotao[0]);if(resposta==JOptionPane.YES_OPTION){cronometro.stop();analiseDados.gerarArqTexto();returnJOptionPane.YES_OPTION;}returnJOptionPane.NO_OPTION;}}
Thread.sleep(1000*60*12);// fica parado por 12 minutos
Att.
A
alexADS02
Adelar:
Use Thread.sleep:
Thread.sleep(1000*60*12);// fica parado por 12 minutos
Att.
Ok pode deixar…
Eu coloco essa instrução dentro do laço!?
Ele vai disparar os eventos mesmo com essa Thread!?
Adelar
Umm… se o valor analiseDados.valor fosse atualizado por uma thread seria para colocar dentro do do:
do {
Thread.sleep(1000*60*12);
}while(analiseDados.valor <= 2);
mas no seu caso não funciona mesmo… se usar todo o programa vai ficar parado :?
Att.
samuel.grigolato
você precisa esperar exatamente 12 minutos ou até que algo ocorra?
se for o segundo caso… usar os métodos .wait() e .notifyAll() em um objeto compartilhado pela thread principal e o action listener talvez seja a melhor opção.
A
alexADS02
samuel.grigolato:
você precisa esperar exatamente 12 minutos ou até que algo ocorra?
se for o segundo caso… usar os métodos .wait() e .notifyAll() em um objeto compartilhado pela thread principal e o action listener talvez seja a melhor opção.
Samuel você pode ser um pouco mais claro… Não entendi, foi mal…rs
Dentro do prazo de 12 minutos ocorrerão eventos disparados a cada 30 segundos…
Os eventos que ocorrer eu tenho que relatá-los nesse intervalo, entendeu!?
Adelar
alexADS02:
samuel.grigolato:
você precisa esperar exatamente 12 minutos ou até que algo ocorra?
se for o segundo caso… usar os métodos .wait() e .notifyAll() em um objeto compartilhado pela thread principal e o action listener talvez seja a melhor opção.
Samuel você pode ser um pouco mais claro… Não entendi, foi mal…rs
Dentro do prazo de 12 minutos ocorrerão eventos disparados a cada 30 segundos…
Os eventos que ocorrer eu tenho que relatá-los nesse intervalo, entendeu!?
Entendi errado então… se os eventos vão iniciar em 12 minutos então você pode usar Thread.sleep mesmo.
você precisa esperar exatamente 12 minutos ou até que algo ocorra?
se for o segundo caso… usar os métodos .wait() e .notifyAll() em um objeto compartilhado pela thread principal e o action listener talvez seja a melhor opção.
Samuel você pode ser um pouco mais claro… Não entendi, foi mal…rs
Dentro do prazo de 12 minutos ocorrerão eventos disparados a cada 30 segundos…
Os eventos que ocorrer eu tenho que relatá-los nesse intervalo, entendeu!?
Entendi errado então… se os eventos vão iniciar em 12 minutos então você pode usar Thread.sleep mesmo.
Os eventos irão ocorrer DURANTE o prazo de 12 minutos, i. e., de 1 a 12…
Adelar
alexADS02:
Adelar:
alexADS02:
samuel.grigolato:
você precisa esperar exatamente 12 minutos ou até que algo ocorra?
se for o segundo caso.. usar os métodos .wait() e .notifyAll() em um objeto compartilhado pela thread principal e o action listener talvez seja a melhor opção.
Samuel você pode ser um pouco mais claro... Não entendi, foi mal...rs
Dentro do prazo de 12 minutos ocorrerão eventos disparados a cada 30 segundos...
Os eventos que ocorrer eu tenho que relatá-los nesse intervalo, entendeu!?
Entendi errado então.. se os eventos vão iniciar em 12 minutos então você pode usar Thread.sleep mesmo.
Os eventos irão ocorrer DURANTE o prazo de 12 minutos, i. e., de 1 a 12...
Ahhh... acho que estou dormindo pouco heheh :D
você pode usar o join para parar por tempo indefinido, até que a thread que foi lançada acabe. Segue um código de exemplo:
publicclassHelloWorldThreadextendsThread{publicvoidrun(){System.out.println("Hello World from Thread ");System.out.println("Thread t about to exit...");}publicstaticvoidmain(Stringargs[]){Threadt=newHelloWorldThread();t.start();System.out.println("Hello World from Main Thread");try{t.join();}catch(InterruptedExceptionie){System.out.println(ie.getMessage());}System.out.println("Hello World from Main Thread Again!");}}
Att.
A
alexADS02
Adelar:
alexADS02:
Adelar:
alexADS02:
samuel.grigolato:
você precisa esperar exatamente 12 minutos ou até que algo ocorra?
se for o segundo caso.. usar os métodos .wait() e .notifyAll() em um objeto compartilhado pela thread principal e o action listener talvez seja a melhor opção.
Samuel você pode ser um pouco mais claro... Não entendi, foi mal...rs
Dentro do prazo de 12 minutos ocorrerão eventos disparados a cada 30 segundos...
Os eventos que ocorrer eu tenho que relatá-los nesse intervalo, entendeu!?
Entendi errado então.. se os eventos vão iniciar em 12 minutos então você pode usar Thread.sleep mesmo.
Os eventos irão ocorrer DURANTE o prazo de 12 minutos, i. e., de 1 a 12...
Ahhh... acho que estou dormindo pouco heheh :D
você pode usar o join para parar por tempo indefinido, até que a thread que foi lançada acabe. Segue um código de exemplo:
publicclassHelloWorldThreadextendsThread{publicvoidrun(){System.out.println("Hello World from Thread ");System.out.println("Thread t about to exit...");}publicstaticvoidmain(Stringargs[]){Threadt=newHelloWorldThread();t.start();System.out.println("Hello World from Main Thread");try{t.join();}catch(InterruptedExceptionie){System.out.println(ie.getMessage());}System.out.println("Hello World from Main Thread Again!");}}
Att.
Cara... Eu nao entendi o que esse programa faz... Não manjo Threads... isso que é meu problema...=[
Adelar
Explicando o código:
publicclassHelloWorldThreadextendsThread{publicvoidrun(){System.out.println("Hello World from Thread ");System.out.println("Thread t about to exit...");}publicstaticvoidmain(Stringargs[]){Threadt=newHelloWorldThread();t.start();System.out.println("Hello World from Main Thread");try{t.join();}catch(InterruptedExceptionie){System.out.println(ie.getMessage());}System.out.println("Hello World from Main Thread Again!");}}
O início da execução é pelo main.
Logo após é criada uma variável do tipo Thread que recebe a classe atual*.
Thread t = new HelloWorldThread();
* Para poder ser atribuída para a variável do tipo Thread a classe atual deve extender a classe Thread:
publicclassHelloWorldThreadextendsThread
Daí quando chama o método start é lançada uma thread (uma linha de execução separada da atual) que executa o que está no método run:
t.start()
executa
publicvoidrun(){System.out.println("Hello World from Thread ");System.out.println("Thread t about to exit...");}
Só que não sei quanto tempo a thread vai demorar para finalizar. Então faço a linha de execução atual, que não é da thread, ficar esperando até a thread terminar com:
t.join();
Note que o código a seguir é executado somente quando a thread termina:
System.out.println("Hello World from Main Thread Again!");
Entendeu a idéia? :D
Att.
A
alexADS02
Entendi a ideia sim…
Mas como faço para colocar no meu código!?
A classe AnaliseDados implementa a interface ActionListener para passar no construtor do cronometro, que é uma classe de javax.swing.Timer(delay, listener).
Agora surgiu essa dúvida…
Como faço agora?
Obrigado pela atenção
/* * Classe reponsável por calcular as voltas percorridas * e guardar os dados a cada 30 segundos numa variável * do tipo String */packagemodelo;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;/** * @author */publicclassAnaliseDadosimplementsActionListener{privateintcontadorTempo;privatefloatvoltaPercorrida;privateEsteiraEletricaestEletrica;privateArquivoTextoarqTexto;privateStringrelacaoDados;privatebooleanacabou;publicintvalor;publicAnaliseDados(EsteiraEletricaee){this.contadorTempo=0;this.estEletrica=ee;this.relacaoDados="00;00;00\r\n";this.acabou=false;this.valor=0;}privatefloatcalcularVoltaPercorrida(){voltaPercorrida=CursorMouse.getVoltas()*estEletrica.getDistancia();returnvoltaPercorrida;}//Evento disparado a cada 30 segundos para lançar a relação de dados@OverridepublicvoidactionPerformed(ActionEvente){contadorTempo+=30;valor++;relacaoDados+=contadorTempo+";"+calcularVoltaPercorrida()+";00\r\n";//indica que o tempo decorrido foi 12 minutosif(contadorTempo==720){acabou=true;}}publicbooleanacabouTeste(){returnacabou;}publicvoidgerarArqTexto(){arqTexto=newArquivoTexto();arqTexto.salvarArquivo(relacaoDados);}}
Adelar
Não consegui pensar em uma solução viável agora… vou pensar em uma daí amanhã lhe retorno… caso já não tenha resolvido ainda
Att.
A
alexADS02
Muito obrigado, sou muito agradecido mesmo!
Não tô conseguindo pensar em nada, falta de pesquisa e de pensar não é te garanto…rs…
Até amanhã…abraços
A
alexADS02
Adelar:
Não consegui pensar em uma solução viável agora… vou pensar em uma daí amanhã lhe retorno… caso já não tenha resolvido ainda