Question

Je suis avoir une tâche prévue qui est censé exécuter toutes les 10 secondes. Il fonctionne quand je viens de lancer le projet, ce qui signifie, il fonctionnera () une fois, mais il ne sera pas la prochaine fois. Quelqu'un peut-il me dire quelle partie est wrong..I a passé des heures à essayer de remédier à ce problème, mais en vain :( Ceci est mon principal:

public static void main(String[] args)  {

    launch(TestingApp.class, args);


    Timer timer = new Timer();
    timer.scheduleAtFixedRate(new Cost(), 10*1000, 10*1000);}

Voici le code de coût:

public class Cost extends TimerTask {

   public void run() {
      Calendar rightNow = Calendar.getInstance();
      Integer hour = rightNow.get(Calendar.HOUR_OF_DAY);

      if (hour == 3) {
         try {

            File file = new File("D:/TESTAPP/Testing.csv");
            if (file != null) {
               Opencsv csv = new Opencsv();

               csv.Csvreader();

            }
         } catch (IOException ex) {
            Logger.getLogger(Cost.class.getName()).log(Level.SEVERE, null, ex);
         }
      }

      else {

      }
   }
}

Certaines des méthodes que j'ai essayé a été mis fin à une Thread.sleep à la fin du code des coûts, et l'autre méthode que j'ai essayé a été ajouté un certain temps (vrai) mon principal ...

Était-ce utile?

La solution

Je pense que ceci:

Opencsv csv = new Opencsv();
csv.Csvreader();

bloque le fil de la minuterie. Avez-vous essayé de faire cela dans un thread d'arrière-plan?

Par exemple, votre code est équivalent à ceci:

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

public class TestTimer {
   public static void main(String[] args) {
      Timer timer = new Timer();
      timer.scheduleAtFixedRate(new TimerTask() {

         @Override
         public void run() {
           System.out.println("here");
           try {
              Thread.sleep(10 * 1000);
           } catch (InterruptedException e) {}
         }
      }, 1000, 1000);
   }
}

Je suggère qu'au lieu que vous faites les choses intérieur dans un fil d'arrière-plan afin de ne pas ralentir la baisse de la minuterie. Notez les différents temps d'exécution de celle-ci:

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

public class TestTimer {
   public static void main(String[] args) {
      Timer timer = new Timer();
      timer.scheduleAtFixedRate(new TimerTask() {

         @Override
         public void run() {
            new Thread(new Runnable() {
               public void run() {
                  System.out.println("here");
                  try {
                     Thread.sleep(10 * 1000);
                  } catch (InterruptedException e) {}
               }
            }).start();
         }
      }, 1000, 1000);
   }
}

Edit 2 Encore une fois, votre question a une étiquette « swing », suggérant que votre question porte sur le code qui fait partie d'une interface graphique Swing. Si oui, les recommandations peuvent doivent être différentes, surtout si l'un de vos besoins de code pour être appelé sur le thread d'événement Swing.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top