问题描述
抱歉,如果我听起来很愚蠢。我才刚开始我几乎没有上课。
我想对for
循环应用时间延迟。我尝试使用thread.sleep
,但它使整个GUI无法运行。有人告诉我使用Swing计时器来说代码,所以我尝试了。
我看过一些教程,但似乎无法正常工作。这是我的代码的一部分:
for (int d = 0; d < 201; d++) {
//Need to insert time delay here
System.out.println(jorgegress);
progressbard.setValue(jorgegress);
}
这是我使其工作的尝试之一:
JButton buttond = new JButton("Click me");
buttond.setBounds(10,190,416,63);
Timer timer;
timer = new Timer(1000,null);
timer.setRepeats(true);
buttond.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
System.out.println("ok this works");
for (int d = 0; d < 201; d++) {
//Need to insert time delay here
timer.start();
System.out.println(d);
progressbard.setValue(d);
}
timer.stop();
我在做什么错? (可能做错了很多事)
解决方法
尝试用此方法代替for循环。按下按钮将启动计时器。计时器达到所需的计数时将自行停止。这是非常基本的。可以进一步对其进行定制,以获取计数阈值,延迟甚至其他运行方法(通过lambda)。
Timer t = new Timer(0,new ActionListener() {
int count = 0;
public void actionPerformed(ActionEvent ae) {
if (count > 201) {
((Timer)ae.getSource()).stop();
}
System.out.println(jorgegress);
progressboard.setValue(jorgegress);
count++;
}
});
t.setDelay(100); // delay is in millseconds.
t.start();
您可能想在定时器运行时锁定按钮,然后在定时器停止时重新启用它。这样可以防止多个计时器同时运行。