2009-08-03 20 views
21

Non sono un esperto, solo un principiante. Quindi ti chiedo gentilmente di scrivere un codice per me.Chiamare una funzione ogni 10 minuti

Se si dispone di due classi, CLASS A e CLASS B e all'interno di CLASS B, esiste una funzione denominata funb(). Voglio chiamare questa funzione da CLASS A ogni dieci minuti.

Mi avete già dato qualche idea, tuttavia non ho capito bene.

Puoi pubblicare qualche codice di esempio, per favore?

+4

penso che da qualche parte dietro a questo c'è una domanda valida; è per questo che l'ho modificato. – balpha

+1

@balpha: hai lavorato un po 'di magia lì: o –

risposta

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

Basta cambiare il ritardo .... –

+0

TimerTask è obsoleto ed è stato sostituito con ExecutorService e le relative implementazioni. – skaffman

+2

Davvero? Non riesco a trovare nulla che lo dica. Sarei interessato a vedere le tue fonti. Grazie ! :) –

23

Date un'occhiata al ScheduledExecutorService:

Ecco una classe con un metodo che imposta uno ScheduledExecutorService emette un segnale acustico ogni dieci secondi per un'ora:

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

Try Questo. Ripeterà la funzione run() ogni minuto impostato. Per modificare i minuti impostati, modificare la variabile MINUTI

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. 

Non dimenticare di fare le importazioni!

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

Per maggiori informazioni, vai qui:

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

Problemi correlati