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