Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - Problemi sviluppo Timer in Java
Forum - Java - Problemi sviluppo Timer in Java

Avatar
GhezaSh (Normal User)
Rookie


Messaggi: 46
Iscritto: 06/02/2010

Segnala al moderatore
Postato alle 17:23
Mercoledė, 16/06/2010
Ciao, oggi ho cercato di sviluppare un Timer in Java, prima l'ho fatto a console e andava benissimo poi l'ho rifatto con la GUI e li iniziano i problemi!
In pratica al posto di inserire nella label ogni secondo un numero diverso che va da 0 a 10 aspetta 10 secondi e mette appunto subito il 10.

Vi lascio il codice
Codice sorgente - presumibilmente Java

  1. import javax.swing.*;
  2.  
  3. import java.awt.*;
  4. import java.awt.event.*;
  5.  
  6. public class JTimer extends JFrame{
  7.         private JPanel pannello;
  8.         private JButton bottone;
  9.         public JLabel time;
  10.         JTimer(int secondi){
  11.                 super("JTimer");
  12.                 AscoltaEventi ae = new AscoltaEventi();
  13.                 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  14.                 setSize(500,500);
  15.                 pannello = new JPanel();
  16.                 pannello.setSize(500,500);
  17.                 pannello.setLayout(null);
  18.                 add(pannello);
  19.                 setVisible(true);
  20.                
  21.                 bottone = new JButton("Start");
  22.                 bottone.setBounds(225,200,50,50);
  23.                 bottone.addActionListener(ae);
  24.                 pannello.add(bottone);
  25.                 time = new JLabel();
  26.                 time.setBounds(10,10,200,200);
  27.                 pannello.add(time);
  28.                
  29.         }
  30.  
  31.  
  32.         public class AscoltaEventi implements ActionListener{
  33.  
  34.                
  35.                 public void actionPerformed(ActionEvent e) {
  36.                         String pressione = e.getActionCommand();
  37.                         if(pressione.equals("Start")){
  38.                                 Timer(10);
  39.                         }
  40.                 }
  41.                
  42.  
  43.                 public void Timer(int tempo){
  44.                                 int i = 0;
  45.                                 while(i <= tempo ){
  46.                                         try{
  47.                                         Thread.sleep(1000);
  48.                                         }catch(InterruptedException e){
  49.                                                 e.printStackTrace();
  50.                                         }
  51.                                         time.setText(""+i);
  52.                                         i++;
  53.                                 }
  54.                         }
  55.                 }
  56.                 public static void main(String[] args) {
  57.                         JTimer prova = new JTimer(10);
  58.                 }
  59.  
  60.  
  61.  
  62. }



Attendo risposta, grazie.

PM Quote
Avatar
tekdu (Normal User)
Rookie


Messaggi: 45
Iscritto: 07/04/2010

Segnala al moderatore
Postato alle 15:04
Sabato, 03/07/2010
il problema č che quando viene richiamato il metodo timer(tempo) l'applicazione rimane "impegnata" a svolgere le relative operazioni.
per poter visualizzare sulla gui l'aggiornamento del timer devi far eseguire timer(tempo) ad un thread, ad esempio cosė:
Codice sorgente - presumibilmente Java

  1. public  class AscoltaEventi implements  ActionListener,Runnable{
  2. private int tempo;
  3.  
  4.         public void actionPerformed(ActionEvent e) {
  5.             String pressione = e.getActionCommand();
  6.             if(pressione.equals("Start")){
  7.                 Timer(10);
  8.             }
  9.         }
  10.        
  11.         public void run(){
  12.                 int i = 0;
  13.                 while(i <= tempo ){
  14.                     try{
  15.                     Thread.sleep(1000);
  16.                     }catch(InterruptedException e){
  17.                         e.printStackTrace();
  18.                     }
  19.                     time.setText(""+i);
  20.                     i++;
  21.                 }
  22.  
  23.         }
  24.  
  25.         public void Timer(int tempo){
  26.                 this.tempo=tempo;
  27.                 new Thread(this).start();
  28.             }
  29.         }



cosė dovrebbe funzionare...

PM Quote