2009-08-03 7 views
21

Je ne suis pas un expert, juste un débutant. Donc, je vous demande de bien vouloir écrire du code pour moi.Appel d'une fonction toutes les 10 minutes

Si j'ai deux classes, CLASS A et CLASS B, et à l'intérieur CLASS B il y a une fonction appelée funb(). Je veux appeler cette fonction de CLASS A toutes les dix minutes.

Vous m'avez déjà donné quelques idées, mais je n'ai pas bien compris.

Pouvez-vous poster un exemple de code, s'il vous plaît?

+4

Je pense que quelque part derrière cela, il y a une question valable; C'est pourquoi je l'ai édité. – balpha

+1

@balpha: vous avez travaillé de la magie là-bas: o –

Répondre

9
import java.util.Date; 

import java.util.Timer; 

import java.util.TimerTask; 

public class ClassExecutingTask { 

    long delay = 10 * 1000; // delay in milliseconds 
    LoopTask task = new LoopTask(); 
    Timer timer = new Timer("TaskName"); 

    public void start() { 
     timer.cancel(); 
     timer = new Timer("TaskName"); 
     Date executionDate = new Date(); // no params = now 
     timer.scheduleAtFixedRate(task, executionDate, delay); 
    } 

    private class LoopTask extends TimerTask { 
     public void run() { 
      System.out.println("This message will print every 10 seconds."); 
     } 
    } 

    public static void main(String[] args) { 
     ClassExecutingTask executingTask = new ClassExecutingTask(); 
     executingTask.start(); 
    } 


} 
+0

Il suffit de changer le délai .... –

+0

TimerTask est obsolète, et a été remplacé par ExecutorService et les implémentations associées. – skaffman

+2

Vraiment? Je ne trouve rien qui le dise. Je serais intéressé de voir vos sources. Merci ! :) –

23

Jetez un oeil à la ScheduledExecutorService:

Voici une classe avec une méthode qui met en place un ScheduledExecutorService émet un bip toutes les dix secondes pendant une heure:

import static java.util.concurrent.TimeUnit.*; 
class BeeperControl { 
    private final ScheduledExecutorService scheduler = 
     Executors.newScheduledThreadPool(1); 

    public void beepForAnHour() { 
     final Runnable beeper = new Runnable() { 
       public void run() { System.out.println("beep"); } 
      }; 
     final ScheduledFuture<?> beeperHandle = 
      scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS); 
     scheduler.schedule(new Runnable() { 
       public void run() { beeperHandle.cancel(true); } 
      }, 60 * 60, SECONDS); 
    } 
} 
2
public class datetime { 

    public String CurrentDate() { 

     java.util.Date dt = new java.util.Date(); 
     java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     String currentTime = sdf.format(dt); 
     return currentTime; 

    } 

    public static void main(String[] args) { 
     class SayHello extends TimerTask { 

      datetime thisObj = new datetime(); 

      public void run() { 
       String todaysdate = thisObj.CurrentDate(); 
       System.out.println(todaysdate); 
      } 
     } 
     Timer timer = new Timer(); 
     timer.schedule(new SayHello(), 0, 5000); 
    } 
} 
6

Essayez ce. Il répétera la fonction run() toutes les minutes. Pour changer les minutes réglées, changez la variable MINUTES

int MINUTES = 10; // The delay in minutes 
Timer timer = new Timer(); 
timer.schedule(new TimerTask() { 
    @Override 
    public void run() { // Function runs every MINUTES minutes. 
     // Run the code you want here 
     CLASSB.funcb(); // If the function you wanted was static 
    } 
}, 0, 1000 * 60 * MINUTES); 
    // 1000 milliseconds in a second * 60 per minute * the MINUTES variable. 

N'oubliez pas de faire les importations!

import java.util.Timer; 
import java.util.TimerTask; 

Pour plus d'informations, rendez-vous ici:

http://docs.oracle.com/javase/7/docs/api/java/util/Timer.html http://docs.oracle.com/javase/7/docs/api/java/util/TimerTask.html

Questions connexes