2012-01-13 12 views
1

私は10秒ごとに実行する予定のタスクを持っています。私はちょうどプロジェクトを実行するときに動作します。つまり、一度実行されますが、それ以降の時間は実行されません。誰かがwrong..Iは、この問題を解決しようとする時間を過ごしたが、無駄にされた部分を私に伝えることができます:( これが私のメインです:タイマの繰り返し実行は一度だけ実行する

public static void main(String[] args) { 

    launch(TestingApp.class, args); 


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

これはコストコードです:

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 { 

     } 
    } 
} 

私が試した方法のいくつかは、コストコードの末尾にのThread.sleepを終了し、私が試した他の方法は、しばらく(真の)私のメイン...

+0

「創造的な」インデントスタイル。 –

+0

これはどのように問題を解決することに関連していますか? – Eugene

+1

私たちがあなたを助けてくれるようにしたいのであれば、私たちがあなたのコードを読んで理解することを困難にしないことがあなたの最大の関心事です。私たちは皆ボランティアです。努力をするように頼んだら、同じことをする必要があります。 –

答えて

3

添加し、私はこの容疑者:

は、タイマーのスレッドをブロックしています。あなたはバックグラウンドスレッドでこれをやろうとしましたか?

例えば、あなたのコードは、これと同等です:

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); 
    } 
} 

私がダウンタイマーを遅くしないように、代わりにあなたがバックグラウンドスレッドで内側のものを行うことを示唆しています。これの実行の異なる時間に注意してください。

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); 
    } 
} 

編集2
ここでも、あなたの質問は、あなたの質問は、SwingのGUIの一部であるコードが含まれていることを示唆している「スイング」のタグがあります。もしそうなら、特にSwingイベントスレッドでコードを呼び出す必要がある場合は、推奨事項が異なる必要があります。

+0

私はまだこれを理解しています...私はスレッドをバックグラウンドするのは初めてですが、 – Eugene

+0

@EugeneWong:もう一度、あなたの質問にあなたの質問にSwing GUIの一部であるコードが含まれていることを示唆する "swing"タグがあります。もしそうなら、特にSwingイベントスレッドでコードを呼び出す必要がある場合は、推奨事項が異なる必要があります。 –

+0

ああ..私は理解してそれを稼働させました。どうもありがとう!私は本当にあなたの助けに感謝します!私は最終的にこれで数時間後に最後に寝ることができます。再度、感謝します! – Eugene

関連する問題