/**
* Schedule a task for repeated fixed-rate execution after a specific time
* has been reached.
*
* @param task
* the task to schedule.
* @param when
* time of first execution.
* @param period
* amount of time in milliseconds between subsequent executions.
* @throws IllegalArgumentException
* if {@code when.getTime() < 0} or {@code period < 0}.
* @throws IllegalStateException
* if the {@code Timer} has been canceled, or if the task has been
* scheduled or canceled.
*/
public void scheduleAtFixedRate(TimerTask task, Date when, long period)
{
if (period <= 0 || when.getTime() < 0) {
throw new java.lang.IllegalArgumentException();
}
long delay = when.getTime() - java.lang.SystemJ.currentTimeMillis();
scheduleImpl(task, delay, period, true);
}