需要应用Swing计时器,但是没有成功

问题描述

抱歉,如果我听起来很愚蠢。我才刚开始我几乎没有上课。 我想对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();

您可能想在定时器运行时锁定按钮,然后在定时器停止时重新启用它。这样可以防止多个计时器同时运行。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...