Java 如何在下面的片段代码中获得时间
为什么Java 如何在下面的片段代码中获得时间,java,Java,为什么getTime()方法返回null值?当time被声明为static变量时,它返回一个非空值,但是我们不能创建具有不同时间的对象 package timecounter; import java.util.Timer; import java.util.TimerTask; public class Timerx extends TimerTask { int H, M, S; Timer timer; String time; @Override
getTime()
方法返回null
值?当time
被声明为static
变量时,它返回一个非空值,但是我们不能创建具有不同时间的对象
package timecounter;
import java.util.Timer;
import java.util.TimerTask;
public class Timerx extends TimerTask {
int H, M, S;
Timer timer;
String time;
@Override
public void run() {
S++;
if (S >= 60) {
M++;
S = 0;
if (M >= 60) {
H++;
M = 0;
if (H >= 12) {
H = 0;
}
}
}
this.time = String.format("%2d:%2d:%2d", H, M, S);
System.out.print("Running");
}
public void start() {
timer.schedule(new Timerx(), 1000, 1000);
}
public Timerx() {
this.timer = new Timer();
}
public String getTime() {// here return null value
return time;
}
}
替换:
timer.schedule(new Timerx(), 1000, 1000);
与:
然而,这种代码的平静不是很好。您希望有多个计时器计数器,但每个计时器任务都有自己的计时器。每个计时器都需要一个线程来提供其服务。最好将多个TimerTask与一个计时器一起使用
例如,更换
Timer timer;
与:
或者将其提取到一个单独的单例类,例如CounterService。您所说的“字符串静态时间”变量“返回时”是什么意思?我猜您是在一个新实例上调用
getTime()
,而不是在计时器实际启动的实例上。start()
似乎在安排一个new Timerx()
而不是这个
。我想这就是问题所在。实际上,我无法获得时间,因为它返回空值。当我将时间变量更改为字符串时,它的工作状态是,但每个实例中的计时器都返回相同的时间。非常感谢。我试试看
Timer timer;
static Timer timer = new Timer();