当前位置: 首页 > 知识库问答 >
问题:

如何阻止Javax。摆动计时器?

燕元明
2023-03-14

我是一个java新手,我正在使用netbean创建一个调度程序。我的软件将从用户那里获取时间和操作,并将这些数据输入到单独的数组列表中。然后我使用javax.swing.timer启动倒计时计时器。当用户完成输入数据并点击“运行”按钮时,计时器将从数组列表中的第一个元素中获取运行时间并开始倒计时。当倒计时时间达到0时,计时器将从数组列表中的下一个元素中获取倒计时时间,依此类推。

我的问题是,计时器运行得很好,但是当数组列表中没有更多元素时,它仍然不会停止。请帮我。这是我代码中遇到麻烦的部分:

private void btnstartRunActionPerformed(java.awt.event.ActionEvent evt) {                                            
  countdown = ActionTime.get(0);
  Action.setText(ActionName.get(c));
  timer = new Timer(1000,new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent event){

      if(countdown<=0){
          try{
            c++;
            Action.setText(ActionName.get(c));
            //this nested if statement is to check whether the array has any more elements.
            //(This is the part that doesn't work.)
            if(c >= ActionTime.size()){
              timer.stop();
              JOptionPane.showMessageDialog(null, "Workout Completed!");
            }  
            countdown=ActionTime.get(c);
            timer.restart();

          } catch (Exception error2){
          }
       }
       Time.setText(Integer.toString(countdown));
       countdown--;
     }
  });
  timer.start();
}                                           

共有2个答案

宇文峰
2023-03-14

下面是一个例子:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.Timer;

public class Main extends JFrame {
    Timer timer;

    int counter;

    Main(String title) {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        ActionListener a = new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println("Counter = " + counter);

                if (++counter > 10) {
                    timer.stop();
                    System.exit(0);
                }
            }
        };

        timer = new Timer(300, a);
        timer.start();

        pack();
        setVisible(true);
    }

    public static void main(String[] args) {
        new Main("Timer Demo1");
    }
}
姚烨
2023-03-14

你应该改变:

            c++;
            Action.setText(ActionName.get(c)); //move this down
            if(c>=ActionTime.size()){
                timer.stop();
                JOptionPane.showMessageDialog(null, "Workout Completed!");
            }

致:

            c++;
            if(c>=ActionTime.size()){
                timer.stop();
                JOptionPane.showMessageDialog(null, "Workout Completed!");
                return; //add this too as the program should not continue with below
            }
            Action.setText(ActionName.get(c)); //to here

因为当你尝试做ActionName时。get(c)c的值超过最大可能值时,get方法将抛出一个异常。这就引出了你犯的第二个错误:

           catch(Exception error2){

           }

这样做会使程序忽略异常,并像什么都没发生一样继续。这是一个容易犯的错误,它欺骗了你,让你认为其他事情是错的,但现在你知道了!将其更改为:

           catch(Exception error2){
                error2.printStackTrace();
                System.exit(-1); //or some error handling
           }

或者删除try/catch块,以便异常将结束程序或以其他方式处理。

 类似资料:
  • 我正在用摇摆计时器打卡NetBeans: 我只是用System.out.print来测试程序,它不是真正程序的一部分。我调用停止()方法,但计时器继续计数。此外,我通过但它的计数速度是原来的两倍。有人能帮忙吗? 编辑: 这是我的计时器(有点像SSCCE): 它不能正常工作,因为秒没有出现,但它确实显示了20次,这就是我想要的。这只是在它自己的应用程序中,在我的实际程序中更容易看到问题。 我注意到游

  • 问题内容: 有人可以教我如何使用a 来达到以下目的: 当我单击鼠标时,我需要一个开始动画的多边形(例如旋转等简单动画);当我再次单击时停止动画。 我对理解工作方式没有任何问题,但对于实际的动画来说,没有任何问题。我尝试在方法中用while块模拟动画,在该方法中我将绘制,擦除和重绘多边形(例如,模拟旋转),但是在while内,applet不会监听点击。它只会在片刻之后收听。单击鼠标时,我需要摆动计时

  • 我在Swing和设置角色动画方面有一些问题,我有一个带有关键侦听器的JFrame,当用户点击时,它在这里调用我的JPanel方法 这个动画我的角色,但这么快,我们可以看到一个东西,我怎么才能看到动画?

  • 问题内容: 我正在尝试在ActionListener中停止计时器。以下是我正在尝试执行的代码。我打算停止在actionPerformed方法内满足特定条件时创建的计时器。timer.stop()不起作用,编译器不允许我这样做。 任何帮助。建议,建议将非常有帮助。 } 在此先感谢克里希南 问题答案: 也可能: 或者,使用事件对象获取源(并将其 强制转换为boo ): 或者,将计时器保留在实例变量中,

  • 我开始使用SBT开发Scala应用程序。我发现我需要两个依赖项作为开始,所以这是scala-swingU实用程序和javax.swing.SwingU实用程序。我一直在搜索网络、maven仓库和github,但仍然找不到javax.swing包去哪里了。到目前为止,我已经在Maven Repos中找到了javax,但由于某种原因,javax.swing没有在那里列出。 我试图将javax依赖项添加

  • 问题内容: 我在游戏中使用了摇摆计时器,但是当游戏运行时,它似乎有平稳运行的时刻和减速的时刻。 为什么时间在波动? 我该如何解决? 这是我的代码示例。在我的实际程序中,我正在绘制图像,而不仅仅是矩形。还有很多碰撞检测和其他小的计算正在发生。 另外,这是游戏的Jar文件的链接,因此您可以运行它,(满是)明白我的意思。http://dl.dropbox.com/u/8724803/Get%20To%2