Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在下面的片段代码中获得时间_Java - Fatal编程技术网

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();