web-dev-qa-db-fra.com

Appel d'une fonction toutes les 10 minutes

Je ne suis pas un expert, juste un débutant. Je vous prie donc de bien vouloir écrire du code pour moi.

Si j'ai deux classes, CLASS A Et CLASS B, Et à l'intérieur de CLASS B Il y a une fonction appelée funb(). Je veux appeler cette fonction à partir 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 publier un exemple de code, s'il vous plaît?

26
user149537

Jetez un œil à ScheduledExecutorService :

Voici une classe avec une méthode qui configure un ScheduledExecutorService pour émettre 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);
    }
 }
27
Tim
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();
    }


}
15
Philippe Carriere

Essaye ça. Il répétera la fonction run () toutes les minutes définies. Pour modifier les minutes définies, modifiez 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.htmlhttp://docs.Oracle.com/javase/7/ docs/api/Java/util/TimerTask.html

11
Fnaf Server
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); 
    }
}
4
overflow

Solution avec Java 8

ClassB b = new ClassB();    
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
Runnable task = () -> {
    b.funb();
};
executor.scheduleWithFixedDelay(task, 0, 10, TimeUnit.MINUTES);
0
byteprom