【问题标题】:Timer Schedule - Java定时器计划 - Java
【发布时间】:2015-01-14 22:17:52
【问题描述】:
new java.util.Timer().scheduleAtFixedRate(timeleft(), 0, 1000);

这是我希望每秒发生的方法timeleft() 的代码。 我的课叫做定时器。 不知道为什么会出错。


当我将鼠标悬停在线时,它显示“此处不允许使用 void 类型”。 我将 JFrame 用于 GUI,并在我按下按钮时将其放入一个事件中,并带有一个计时器,该计时器从您在文本字段中输入的任何数字开始倒计时。

【问题讨论】:

  • 一个错误什么错误?
  • 你的错误是什么...
  • 在你的脑海里,timeleft() 写在另一个方法里面是什么意思?
  • 对不起。当我将鼠标悬停在线时,它会显示“此处不允许使用 void 类型”。
  • 如果让你猜,你会说这意味着什么?

标签: java swing timer compiler-errors schedule


【解决方案1】:

你说:

我将 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。相反,我会让它等待一段时间。

【讨论】:

  • 我很困惑。如果我发送我的代码会有帮助吗?我正在使用 NetBeans 制作我的 GUI,并通过右键单击 GUI 屏幕上的按钮来创建事件。我把它放在一个事件方法中,得到了大量的错误。这是当我将鼠标悬停在计时器的创建上时: 不是抽象的,并且不会覆盖 ActionListener 中的抽象方法 actionPerformed(ActionEvent)
  • @Aria:我不喜欢 NetBeans 的代码生成的原因之一,因为它使新手不必知道 Swing 库的工作原理,因此他们不理解它。但无论如何,如果您遇到问题,那么可以发布带有任何和所有错误消息的代码。而且,切勿将您在本网站上看到的代码盲目地发布到您的程序中。相反,借用这些想法,但创建自己的代码。此外,当您收到错误消息时,请认真查看它们,因为它们通常会告诉您确切的问题所在。
【解决方案2】:

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

如果您需要以固定速率执行某些代码,那么您需要创建一个具有适当run 实现的TimerTask 对象并将其传递给scheduleAtFixedRate

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    相关资源
    最近更新 更多