【发布时间】:2012-02-11 17:03:51
【问题描述】:
谁能告诉我为什么这个计时器只运行一次?
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TimerTest implements ActionListener{
private Robot r;
private Timer t;
private int i;
public TimerTest(){
i = 0;
try {
r = new Robot();
} catch (AWTException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
t = new Timer(1000, this);
t.setRepeats(true);
t.start();
}
public static void main(String [] args){
new TimerTest();
}
@Override
public void actionPerformed(ActionEvent arg0) {
i++;
System.out.println("Action..." + i);
}
有趣的是,如果我将 Timer 中的延迟减少到 100,它会按预期工作。更有趣的是,如果我删除初始化机器人的代码,它根本不起作用,程序一运行就终止。
我已经在 Windows 7 和 Ubuntu 上尝试过这个(尽管在 Ubuntu 上我根本无法使用机器人,因为我遇到了一个异常。可能与权利有关)。
【问题讨论】:
-
Robot 的内容是什么?
-
现在就是这样。我只是在测试 Robot 类,但我注意到了这一点,并将其剥离到最本质的部分以演示这个问题。程序中没有其他内容。
-
我已经有一段时间没有使用 java Timer 了。主要完成时计时器会死吗?我知道普通线程不在java中,但我不记得定时器。如果是这种情况,您只需要添加一段时间 (t.isRunning());到主函数编辑:再看一遍,你必须为你创建的 TimerTest 的实例设置一个变量,并检查它的定时器是否仍在循环中运行,或者只是在 main if 中创建一个无限循环适合你想要的。
-
请阅读this。
-
顺便说一句,您为什么要创建没有任何 GUI 元素的计时器?这是重复的屏幕截图吗?