Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 延时不能正常工作_Java_Netbeans - Fatal编程技术网

Java 延时不能正常工作

Java 延时不能正常工作,java,netbeans,Java,Netbeans,在我的程序中,我使用以下代码所做的是在特定的时间间隔(用户提供的时间)内(自动)按一个按钮一定的时间(用户提供的次数)。但问题是,这有时无法正常工作。我的意思是,如果我把时间设为1.5秒,然后去做;10次中有9次它以1.5秒的间隔运行,但在我运行它的第10次时,它跑得很快;以不到一秒的时间间隔单击按钮。(请注意,此处10分之9仅为示例,并非准确数字) 代码: double y = 1000 * (Double.parseDouble(t2.getText())); int zad = (int)

在我的程序中,我使用以下代码所做的是在特定的时间间隔(用户提供的时间)内(自动)按一个按钮一定的时间(用户提供的次数)。但问题是,这有时无法正常工作。我的意思是,如果我把时间设为1.5秒,然后去做;10次中有9次它以1.5秒的间隔运行,但在我运行它的第10次时,它跑得很快;以不到一秒的时间间隔单击按钮。(请注意,此处10分之9仅为示例,并非准确数字)

代码:

double y = 1000 * (Double.parseDouble(t2.getText()));
int zad = (int)y;
        final Timer timer = new Timer(zad, new ActionListener() {
    int tick = 0;

    @Override
    public void actionPerformed(ActionEvent e) {
      System.out.println("Success" + ++tick);
              jButton7.doClick();
              final int col = Integer.parseInt(t3.getText());;
      if (tick >= col) {
        ((Timer) e.getSource()).stop();
        jButton6.setVisible(true);


      }

    }
  });



  timer.setInitialDelay(0);
  System.out.format("About to schedule task.%n");
   timer.start(); 
  System.out.format("Task scheduled.%n");
希望我有道理,如果我没有,我很抱歉,我是java新手。如果你不理解我的问题,请直接问我你在哪里不理解我,我会向你详细说明这一部分

更新:我知道它是什么时候发生的。查看进程是否正在进行,我关闭jframe并单击按钮再次执行,它显示此错误。但当我关闭该窗口时,我希望它停止。

如文档上所述:,方法
停止

 Stops the Timer, causing it to stop sending action events to its listeners.
因此,当您调用
stop
时,将执行最后一个操作。紧接着被调用的一个

您的代码应该是:

double y = 1000 * (Double.parseDouble(t2.getText()));
int zad = (int)y;
final Timer timer = new Timer(zad, new ActionListener() {
    int tick = 0;
    boolean itsOver=false;

    @Override
    public void actionPerformed(ActionEvent e) {
      System.out.println("Success" + ++tick);
      final int col = Integer.parseInt(t3.getText());

      if (! itsOver)
      {
          jButton7.doClick();
      }
      if (tick >= col) {
        itsOver = true;
        ((Timer) e.getSource()).stop();
        jButton6.setVisible(true);
      }
    }
});



timer.setInitialDelay(0);
System.out.format("About to schedule task.%n");
timer.start(); 
System.out.format("Task scheduled.%n");

那是什么样的
定时器
类?这并不明显。@cimnine:如果你将初始延迟设置为
zad
,会发生什么情况?@Brian我不想这样做,但我认为它现在没有任何初始延迟,甚至会在开始时暂停1.5秒;但我认为这并不重要。你说什么?嘿,我不明白你。。。因为我的程序大部分时间都在运行。。。你能详细说明或告诉我如何更改吗?你能编辑一下格式吗?我不太清楚对不起,我错过了一些空格扫描。你也解释一下它是做什么的?当然请注意:当
tick
count结束时,它将布尔变量设置为true。每次调用
doClick()
之前,它都会测试此变量。只要它是
false
,它就知道它还没有结束,也不是最后一次“重影”调用。