timer时间表-java

w6lpcovy  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(377)
new java.util.Timer().scheduleAtFixedRate(timeleft(), 0, 1000);

这是我的方法代码 timeleft() 我希望每一秒都发生。我的课叫定时器。不知道为什么我会出错。
当我将鼠标悬停在行上时,它会显示“此处不允许使用void类型”。我使用一个jframe作为gui,当我按下一个按钮和一个计时器时,它会从您在文本字段中输入的任何数字开始倒计时,并将其放入一个事件中。

mcdcgff0

mcdcgff01#

您声明:
我使用一个jframe作为gui,当我按下一个按钮和一个计时器时,它会从您在文本字段中输入的任何数字开始倒计时,并将其放入一个事件中。
我建议你考虑扔掉你正在问问题的代码,完全重新考虑你的方法。
如果您想在swing gui中创建并运行重复事件,请不要使用java.util.timer,因为您很容易遇到严重的swing线程问题。取而代之的是使用一个swing计时器,一个与swing配合良好的计时器,因为计时器的actionlistener中的所有代码都保证在swing事件线程上运行。
首先,您的代码可以如下所示:

int timerDelay = 1000; // 1000 msecs or 1 second
Timer timer = new Timer(timerDelay, new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) { 
       // code that needs to be repeated goes here
    }

});
timer.setInitialDelay(0);
timer.start();

虽然对于倒计时计时器,我不确定是否将初始延迟设置为0。相反,我会让它等一段时间。

lnxxn5zx

lnxxn5zx2#

从javadoc中可以看到 scheduleAtFixedRate 方法接受 TimerTask 作为第一个论点。您似乎试图传递一个名为 timeleft() ,带有 void 返回类型。
如果需要以固定速率执行某些代码,那么需要创建 TimerTask 对象具有适当的 run 执行并将其传递给 scheduleAtFixedRate .

相关问题