Fórum Temporizador #567506

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

Gostei + 0

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

Gostei + 0

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

Gostei + 0

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:
1
2
3
4
5
6
7
8
9
10
11
12
13
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

Gostei + 0

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.
1
2
3
4
5
6
7
8
9
10
11
package p;
 
public class ClasseC extends javax.swing.JFrame {
 
       public Saques() {
        initComponents();
       Thread.sleep( 10 * 1000 ); // dá erro,
 
 
 
    }}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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

Gostei + 0

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.:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
...
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.:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
...
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

Gostei + 0

17/02/2011

Ana Maruchi

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

Gostei + 0

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:
1
2
3
4
5
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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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

Gostei + 0

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.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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

Gostei + 0

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

Gostei + 0

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

Gostei + 0

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

Gostei + 0

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 ?
1
2
3
4
5
6
7
8
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

Gostei + 0

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 ?
1
2
3
4
5
6
7
8
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

Gostei + 0

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

Gostei + 0

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

Aceitar