在我的程序中,我正在使用以下代码执行操作,在某些时间间隔(用户提供的时间)按下(自动)按钮一定时间(从用户获取的次数)。但问题是,这有时无法正常工作。我的意思是如果我将时间设置为1.5秒并且这样做;它在10秒的时间内完成了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并单击按钮再次执行此操作,它会显示此错误。但当我关闭那个窗口时,我希望它停止。
答案 0 :(得分:2)
如文档所述:http://docs.oracle.com/javase/7/docs/api/javax/swing/Timer.html#stop(),方法stop
:
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");