I am trying to make a simple timer that plays a beep after the specified number of seconds. I managed to get it to work, but the TimerTask continues to run after the beep. Now do I stop execution? Here is my code:
import java.util.Scanner; import java.util.Timer; import java.util.TimerTask; import java.awt.Toolkit; class Alarm { public static void main(String[] args) { long delay; Scanner scan = new Scanner(System.in); System.out.print("Enter a delay in seconds: "); delay = scan.nextInt()*1000; Timer timer = new Timer(); TimerTask task = new TimerTask() { @Override public void run() { Toolkit.getDefaultToolkit().beep(); } }; timer.schedule(task, delay); } }
In order to cancel the Timer Task in Java, we use the java. util. TimerTask. cancel() method.
The cancel() method of Timer class is used to terminate this timer and remove any currently scheduled tasks.
Timer provides method to schedule Task where the task is an instance of TimerTask class, which implements the Runnable interface and overrides run() method to define task which is called on scheduled time.
TimerTask is an abstract class defined in java. util package. TimerTask class defines a task that can be scheduled to run for just once or for repeated number of time. In order to define a TimerTask object, this class needs to be implemented and the run method need to be overridden.
You need to cancel the timer by calling the following methods
timer.cancel(); // Terminates this timer, discarding any currently scheduled tasks. timer.purge(); // Removes all cancelled tasks from this timer's task queue.
This will cancel the task, so something like this would work:
import java.util.Scanner; import java.util.Timer; import java.util.TimerTask; import java.awt.Toolkit; class Alarm { private static boolean run = true; public static void main(String[] args) { long delay; Scanner scan = new Scanner(System.in); System.out.print("Enter a delay in seconds: "); delay = scan.nextInt()*1000; final Timer timer = new Timer(); final TimerTask task = new TimerTask() { @Override public void run() { if(run) { Toolkit.getDefaultToolkit().beep(); } else { timer.cancel(); timer.purge(); } } }; timer.schedule(task, delay); // set run to false here to stop the timer. run = false; } }
Here is what worked for me (used the purge() suggestion also):
import java.util.Scanner; import java.util.Timer; import java.util.TimerTask; import java.awt.Toolkit; class Alarm { public static void main(String[] args) { long delay; Scanner scan = new Scanner(System.in); System.out.print("Enter a delay in seconds: "); delay = scan.nextInt()*1000; final Timer timer = new Timer(); final TimerTask task = new TimerTask() { @Override public void run() { Toolkit.getDefaultToolkit().beep(); timer.cancel(); timer.purge(); } }; timer.schedule(task, delay); } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With