title: Java Timer
body: <p>I'm trying to use a timer to schedule a recurring event in an application. However, I want to be able to adjust the period at which the event fires in real time (according to the users input).</p>
  
  <p>For example:</p>
  
  <pre><code>public class HelperTimer extends TimerTask
  {
      private Timer timer;
      //Default of 15 second between updates
      private int secondsToDelay = 15;
  
      public void setPeriod(int seconds)
      {
          this.secondsToDelay = seconds;
          long delay = 1000; // 1 second
          long period = 1000*secondsToDelay; // seconds
          if (timer != null) 
          {
              timer.cancel();
          }
          System.out.println(timer);
          timer = new Timer();
          System.out.println(timer);
          timer.schedule(this, delay, period);
      }
      public int getPeriod()
      {
          return this.secondsToDelay;
      }
  }
  </code></pre>
  
  <p>I then start a new instance of this class and call its set period function. However, when I do that, I get an Illegal state exception.  You can see the             System.out.println(timer); in there because I'm checking, and yep sure enough, they are two different timers... so why am I getting an IllegalStateException when I try to run a schedule call on a brand new Timer instance!?!?!?!</p>
  
  <pre><code>java.util.Timer@c55e36
  java.util.Timer@9664a1
  Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Task already scheduled or cancelled
      at java.util.Timer.sched(Unknown Source)
      at java.util.Timer.schedule(Unknown Source)
      at HelperTimer.setPeriod(HelperTimer.java:38)
  </code></pre>