如何用java制作倒计时计时器(秒表java)
我有一个问题,当我运行它不停止计数如何用java制作倒计时计时器(秒表java),java,countdowntimer,stopwatch,Java,Countdowntimer,Stopwatch,我有一个问题,当我运行它不停止计数 那么,当计数器达到0时,如何使其停止?您需要指示计时器在最后一次迭代时停止;比如: package test; import java.util.Scanner; import java.util.Timer; import java.util.TimerTask; public class StopWatch { public static int interval; public static void main(String[]
那么,当计数器达到0时,如何使其停止?您需要指示计时器在最后一次迭代时停止;比如:
package test;
import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;
public class StopWatch
{
public static int interval;
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Input seconds => : ");
interval = input.nextInt();
int delay = 1000;
int period = 1000;
Timer time = new Timer();
System.out.println(interval);
time.scheduleAtFixedRate(new TimerTask() {
public void run() {
if (interval == 0) {
System.out.println("work finished");
} else {
System.out.println(setInterval());
}
}
}, delay, period);
}
private static int setInterval() {
return --interval;
}
}
有关更多详细信息,请参阅。您可能不需要在此处调用purge()
,因为只有一个线程处理该计时器;但在更“通用”的用例中,它是必需的
你可能必须改变
public void run() {
if (interval == 0) {
System.out.println("work finished");
time.cancel();
time.purge();
到
(取决于您的Java版本)来告诉编译器,保存后可以从该匿名内部类中访问外部局部变量。这里有一个解决问题的快速方法。您必须调用方法cancel(),如下所示:
final Timer time = new Timer();
package com.test;
import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;
public class StopWatch
{
public static int interval;
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Input seconds => : ");
interval = input.nextInt();
int delay = 1000;
int period = 1000;
final Timer time = new Timer();
System.out.println(interval);
time.scheduleAtFixedRate(new TimerTask() {
public void run() {
if (interval == 0) {
System.out.println("work finished");
time.cancel();
time.purge();
} else {
System.out.println(setInterval());
}
}
}, delay, period);
}
private static int setInterval() {
return --interval;
}
}
多米尼克·尤伯斯菲尔德(Dominique Ubersfeld)提示:答案只是向读者扔代码。。。这不是很有帮助。既不适合你(很少被高估),也不适合读者;因为没有任何解释。你知道,我写了三行字;并将它们放入原始源代码中。。。并不能完全弥补这一点。提示:把已经存在的两个答案放在一起。。。没有提供任何进一步的见解或“附加值”。。。不会给你带来更多的选票。
package com.test;
import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;
public class StopWatch
{
public static int interval;
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Input seconds => : ");
interval = input.nextInt();
int delay = 1000;
int period = 1000;
final Timer time = new Timer();
System.out.println(interval);
time.scheduleAtFixedRate(new TimerTask() {
public void run() {
if (interval == 0) {
System.out.println("work finished");
time.cancel();
time.purge();
} else {
System.out.println(setInterval());
}
}
}, delay, period);
}
private static int setInterval() {
return --interval;
}
}
public static int interval;
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Input seconds => : ");
interval = input.nextInt();
int delay = 1000;
int period = 1000;
Timer time = new Timer();
System.out.println(interval);
time.scheduleAtFixedRate(new TimerTask() {
public void run() {
if (interval == 0) {
System.out.println("work finished");
time.cancel();
} else {
System.out.println(setInterval());
}
}
}, delay, period);
}
private static int setInterval() {
return --interval;
}
}