计时器时间表 - Java

时间:2015-01-14 22:17:52

标签: java swing timer compiler-errors schedule

new java.util.Timer().scheduleAtFixedRate(timeleft(), 0, 1000);

这是我想要每秒发生的方法timeleft()的代码。 我的班叫做Timer。 不知道我为什么会收到错误。


它说"这里不允许使用void类型"当我将鼠标悬停在线上时。 我正在使用一个JFrame用于GUI,当我按下一个按钮以及一个计时器时,将其放入一个事件中,该计时器从您在文本字段中输入的任何数字开始倒计时。

2 个答案:

答案 0 :(得分:2)

你说:

  

我正在使用JFrame作为GUI,当我按下一个按钮以及一个计时器时将其放入一个事件中,该计时器从您在文本字段中输入的任何数字开始倒计时。

我建议您考虑丢弃您提出问题的代码,以完全重新考虑您的方法。

如果您想在Swing GUI中创建并运行重复事件,请不要像您一样使用java.util.Timer,因为您可能很容易遇到严重的Swing线程问题。而是使用Swing Timer,一个适合Swing的Timer,因为Timer的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.相反,我让它等待这段时间。

答案 1 :(得分:0)

javadoc可以看出,scheduleAtFixedRate方法接受TimerTask作为第一个参数。您似乎尝试使用timeleft()返回类型传递名为void的方法的结果。

如果您需要以固定费率执行某些代码,则需要使用适当的run实施创建TimerTask对象,并将其传递给scheduleAtFixedRate