Java Swing计时器不能达到我想要的效果

时间:2016-06-19 09:35:26

标签: java swing timer

我需要编写一个使用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");
  }

}

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

问题在于你是在锁定自己。

使用

Thread.sleep(x * 2);

您正在阻止运行ActionListener的EventDispatchThread。计时器内部仍保留一个标志,表示超时发生,并且应该在下一个可能的时间运行ActionListener。

但是

TIMER.stop();

正在重置TIMER,以便通知丢失。