Temporizador

09/02/2011

0

Olá comunidade, Preciso de um temporizador. Consultei várias páginas, mas não encontrei um procedimento simples. 1) Preciso contar tempos em segundos e após isso executar um procedimento. 2) Preciso, também, controlar a execução de um procedimento por 15 segundos, ultrapassado esse tempo o sistema mostrará uma outra tela. Agradeço a todos, Ana.
Ana Maruchi

Ana Maruchi

Responder

Posts

09/02/2011

Alexandre Viriato

[quote="AnaLins"]Olá comunidade, Preciso de um temporizador. Consultei várias páginas, mas não encontrei um procedimento simples. 1) Preciso contar tempos em segundos e após isso executar um procedimento. 2) Preciso, também, controlar a execução de um procedimento por 15 segundos, ultrapassado esse tempo o sistema mostrará uma outra tela. Agradeço a todos, Ana.
Dê uma olhada [url="http://www.quartz-scheduler.org/"]aqui[/url], [url="http://hotwork.sourceforge.net/hotwork/manual/quartz/quartz-user-guide.html"]aqui[/url] e, principalmente, [url="http://www.roseindia.net/quartz/index.shtml"]aqui[/url]. Se não ajudar, também pode procurar [url="http://www.google.com.br/search?sourceid=chrome&ie=UTF-8&q=java+quartz"]aqui[/url].
Responder

09/02/2011

Ana Maruchi

Consultei. Mas eu preciso de algo muito simples. como: Exibe a tela1; Conte 3 segundos; depois exiba a tela2; e "Digite seu nome:" aguardar 15 segundos, terminado esse tempo retorna a uma outra tela inicial. Sds, Ana.
Responder

09/02/2011

Alexandre Viriato

[quote="AnaLins"]Consultei. Mas eu preciso de algo muito simples. como: Exibe a tela1; Conte 3 segundos; depois exiba a tela2; e "Digite seu nome:" aguardar 15 segundos, terminado esse tempo retorna a uma outra tela inicial. Sds, Ana.
Bom, dá uma olhada nas classes java.util.Timer e java.util.TimerTask. [url="http://www.java2s.com/Code/Java/Development-Class/UsejavautilTimertoscheduleatasktoexecuteonce5secondshavepassed.htm"]Exemplo[/url]
Responder

09/02/2011

Javaxxx

[quote="AnaLins"]Consultei. Mas eu preciso de algo muito simples. como: Exibe a tela1; Conte 3 segundos; depois exiba a tela2; e "Digite seu nome:" aguardar 15 segundos, terminado esse tempo retorna a uma outra tela inicial. Sds, Ana.
Olá! Você tem a opção de utilizar o método [i]sleep()[/i] da classe [i]Thread[/i]. Exemplo:
class Teste
{

      public static void main( String[] args ) throws InterruptedException
      {
          System.out.println( "ok" );    
          Thread.sleep( 5 * 1000 ); // aguarda 5segundos
          System.out.println( "ok" );
          Thread.sleep( 10 * 1000 ); // aguarda 10segundos
          System.out.println( "ok" );  
      }

}
[i]sleep()[/i] recebe como parametro o tempo em milissegundos. Veja se te ajuda. Abraços
Responder

14/02/2011

Ana Maruchi

Obrigado serviu ! Só preciso desse contador para utilizar com métodos em outras classes do pacote, métodos que não estão na main, mas serão chamados por outros métodos bem mais a frente. Por exemplo, quero utilizar o sleep na Classe C.
package p;

public class ClasseC extends javax.swing.JFrame {

       public Saques() {
        initComponents();
       Thread.sleep( 10 * 1000 ); // dá erro, 



    }}
 

package p;

public Class Main{

  
      public static void main( String[] args ) throws InterruptedException  
      {  
          CalsseA a = new ClasseA();
                   a.setDefaultCloseOperation(javax.swing.JFrame.DISPOSE_ON_CLOSE);
          a.(true);System.out.println( "ok" );      
          Thread.sleep( 10 * 1000 ); // aguarda 10 segundos  
           ClasseB b = new ClasseB();// HÁ UM MÉTODO QUE CHAMA ClasseC
    b.setDefaultCloseOperation(javax.swing.JFrame.DISPOSE_ON_CLOSE);
          b.setVisible(true);
          a.setVisible(false);  
             
      }  
  
}  
Responder

14/02/2011

Javaxxx

Olha, para utilizar o método [b]sleep()[/b] é preciso tratar uma [b]InterruptedException[/b] que poderá ser lançada pelo método. Portanto, se não tratada, ocorrerá erro de compilação. Ex1.:
...
public static void main( String[] args ) 
{
       metodo();
      
} 

// Aqui o método trata a possível exceção
private static void metodo() 
{
      try
      {
            System.out.println( "ok" );
            Thread.sleep( 10 * 1000 );
            System.out.println( "ok" );
      }
      catch( InterruptedExcpetion e ){}
}
...
Ex2.:
...
public static void main( String[] args ) 
{
      // Uma vez que 'metodo()' lança exceção, é preciso tratá-la em algum lugar
      try
      {
            metodo();
      }
      catch( InterruptedException e ){}
} 

// Aqui o método não trata, mas lança a exceção
private static void metodo() throws InterruptedException
{
      System.out.println( "ok" );
      Thread.sleep( 10 * 1000 );
      System.out.println( "ok" );
}
...
Responder

17/02/2011

Ana Maruchi

Esses dois últimos exemplos tem travado meu projeto. Será que há um contador simples ?
Responder

17/02/2011

Javaxxx

[quote="AnaLins"]Esses dois últimos exemplos tem travado meu projeto. Será que há um contador simples ?
Na verdade, isso são apenas exemplos. Não é para acrescentar ao seu projeto. Você pode pensar que toda vez que for utilizar o [b]sleep()[/b], é preciso usá-lo da seguinte forma:
try
{
    // Somente aqui dentro vc pode utilizar o [b]sleep()[/b]
}
catch( InterrputedException e ){}
Confira o exemplo abaixo e veja se é isso que vc quer:
public void metodo()
{
      try
      {   
           int i = 0;
           while( ++i <= 5 )
           {
              // Aqui o código que exibe a tela 1

              Thread.sleep( 3 * 1000 );

              // Aqui o código que exibe a tela 2 e entrada de dados

              Thread.sleep( 15 * 1000 );
           }
      }
      catch( InterruptedException e ){}
}
Responder

17/02/2011

Alexandre Viriato

[quote="AnaLins"]Esses dois últimos exemplos tem travado meu projeto. Será que há um contador simples ?
Eu já vi gente teimosa, mas igual tu! Lembra das classes [b]java.util.Timer[/b] e [b]java.util.TimerTask[/b] que eu pedi pra você dar uma olhada? Então, elas resolvem seu problema.
package src.temporizador;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class Janela1 extends JFrame {

	private static final long serialVersionUID = 1L;
	
	protected JButton button1 = null;
	
	protected Janela2 janela2 = null; 
	
	public Janela1() {
		initComponents();
		configureLayout();
	}
	
	private void configureLayout() {
		this.setSize(300, 300);
		this.setLocationRelativeTo(null);
		this.setLayout(new FlowLayout());
		
		this.add(button1);
	}
	
	private void initComponents() {
		
		
		
		button1 = new JButton("Janela2");
		button1.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				SwingUtilities.invokeLater(new Runnable() {
					
					@Override
					public void run() {
						janela2 = new Janela2();
						janela2.setVisible(true);
					}
				});
			}
		});
	}

	
	public static void main(String[] args) {
		new Janela1().setVisible(true);
	}
}
package src.temporizador;

import java.awt.FlowLayout;
import java.util.Timer;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class Janela2 extends JFrame {

	private static final long serialVersionUID = 1L;
	
	protected JLabel          label1 = null;
	protected JTextField      text1  = null;
	protected Timer           timer = null; //incluir
	protected CloseJanelaTask task = null; //incluir
	
	public Janela2() {
		initComponents();
		configureLayout();
	}
	
	private void configureLayout() {
		this.setSize(300, 300);
		this.setLocationRelativeTo(null);
		this.setLayout(new FlowLayout());
		
		this.add(text1);
	}
	
	private void initComponents() {
		text1 = new JTextField(10);
		
		timer = new Timer(); // incluir
		task = new CloseJanelaTask(this); // incluir
		timer.schedule(task, 5 * 1000); // incluir - 5 segundos para teste
	}

	
	public static void main(String[] args) {
		new Janela2().setVisible(true);
	}
}
package src.temporizador;

import java.util.TimerTask;

import javax.swing.JFrame;

public class CloseJanelaTask extends TimerTask {

	private JFrame  janela    = null;
	public CloseJanelaTask(JFrame janela) {
		this.janela    = janela;
	}
	
	@Override
	public void run() {
	   janela.setVisible(false);
	}

}
O código tem que ser melhorado, fiz ele rapidão agora. Como você já deve ter as "janelas" prontas, só o que precisa ser criado é uma classe com 20 linhas e algumas outras linhas pra fazer o agendamento. Acho que isso chega perto do que você chama de simples, né?
Responder

19/02/2011

Ana Maruchi

Obrigada Viriato !!! O exemplo que você deu resolveu boa parte dos meus problemas. Agradeço muito. Um abração, Ana.
Responder

21/02/2011

Ana Maruchi

Fiz o exemplo acima, mas o código está executando muito rápido. Não nos 5 segundos normais. Consultei várias fontes e não consegui identificar o problema. O que deve ser ? Agradeço a ajuda, Ana.
Responder

21/02/2011

Alexandre Viriato

[quote="AnaLins"]Fiz o exemplo acima, mas o código está executando muito rápido. Não nos 5 segundos normais. Consultei várias fontes e não consegui identificar o problema. O que deve ser ? Agradeço a ajuda, Ana.
Ana, esse código executa e a janela aguarda 5 segundos para fechar. Revisa ele e vê se você colocou os 5 * 1000, na linha indicada. (O tempo é dado em milisegundos, por isso a multiplicação pra ficar claro. Mas, você pode colocar direto os 5000)
Responder

22/02/2011

Ana Maruchi

Realmente fecha em 5 segundos. No meu caso ele executa rápido pois eu chamo uma outra janela em seguida. Parece que executam em paralelo. Como devo corrigir o código para impedir isso ?

 timer = new Timer(); 
 task = new CloseJanelaTask(this);
 timer.schedule(task, 5 * 1000); //o objetivo é após fechar a janela atual
//Chamar uma 3a janela

 Janela3 janela3 = new Janela3();
 janela3.setDefaultCloseOperation(javax.swing.JFrame.DISPOSE_ON_CLOSE);
janela3.setVisible(true);

 
Responder

22/02/2011

Alexandre Viriato

[quote="AnaLins"]Realmente fecha em 5 segundos. No meu caso ele executa rápido pois eu chamo uma outra janela em seguida. Parece que executam em paralelo. Como devo corrigir o código para impedir isso ?

 timer = new Timer(); 
 task = new CloseJanelaTask(this);
 timer.schedule(task, 5 * 1000); //o objetivo é após fechar a janela atual
//Chamar uma 3a janela

 Janela3 janela3 = new Janela3();
 janela3.setDefaultCloseOperation(javax.swing.JFrame.DISPOSE_ON_CLOSE);
janela3.setVisible(true);

 
Nesse ponto, ele simplesmente agenda a execução da task, ele não inicia a execução nesse momento. E a task é executada em uma outra thread. Por isso está abrindo a 3. janela imediatamente. O código para abertura da 3. janela tem que ser colocado após o de fechamento da 2.
Responder

02/03/2011

Ana Maruchi

Obrigada, consegui. Mas fiz uma solução deselegante. Criei várias classes CloseJanelaTask1, CloseJanelaTask2, ... para fechar e abrir as janelas.
Responder

APRENDA A PROGRAMAR DO ZERO AO PROFISSIONAL

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar