我需要编写一个使用swing倒计时器来执行某些操作的程序(在这种情况下,在控制台中打印出一个String)。它从微调器获取所需的延迟信息,并在我点击“开始”按钮时执行代码。但是,当我在微调器中输入一个值时,它只等待那么多秒的两倍并完成运行而不打印任何东西。
private void StartActionPerformed(java.awt.event.ActionEvent evt) {
int x = (int) Spinner1.getValue() * 1000;
Timer TIMER = new Timer(x, new MyActionListener());
TIMER.start();
try {
Thread.sleep(x * 2);
} catch (InterruptedException e) {
}
TIMER.stop();
}
class MyActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.out.println("Something");
}
}
任何帮助将不胜感激!
答案 0 :(得分:0)
问题在于你是在锁定自己。
使用
Thread.sleep(x * 2);
您正在阻止运行ActionListener的EventDispatchThread。计时器内部仍保留一个标志,表示超时发生,并且应该在下一个可能的时间运行ActionListener。
但是
TIMER.stop();
正在重置TIMER,以便通知丢失。