Java swing计时器休息

时间:2014-01-01 00:03:48

标签: java swing timer

有没有办法做到这一点?这是我正在制作的模拟器。我想要它,以便当计数器(numTimes)达到139时,它会停止计时器。我尝试delcaring但没有在Action Listener之前初始化计时器并在actionPerformed函数中停止计时器,但它给了我一个错误。我不想使用另一种方法(但是如果它工作得更好那么我就是全部用它),而底部的while循环导致程序冻结?我怎样才能做到这一点?

ActionListener taskPerformer = new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    numTimes++;
                    switch(m1values[numTimes])
                    {
                        case 1:
                            new Moves().L();
                            break;
                        case 2:
                            new Moves().Lprime();
                            break;
                        case 3:
                            new Moves().R();
                            break;
                        case 4:
                            new Moves().Rprime();
                            break;
                        case 5:
                            new Moves().F();
                            break;
                        case 6:
                            new Moves().Fprime();
                            break;
                        case 7:
                            new Moves().B();
                            break;
                        case 8:
                            new Moves().Bprime();
                            break;
                        case 9:
                            new Moves().U();
                            break;
                        case 10:
                            new Moves().Uprime();
                            break;
                        case 11:
                            new Moves().D();
                            break;
                        case 12:
                            new Moves().Dprime();
                            break;
                        default:    
                    }
                    drawAndButtons.add(new graphics());
                    cubeSpace.repaint();
                    if(numTimes >= 139)
                    {
                        numTimes = 0;
                        m1going = false;
                    }
                }
            };
            Timer timer = new Timer( 500 , taskPerformer);
            timer.setRepeats(true);
            timer.start();
            startTime = System.currentTimeMillis();
            m1going = true;
            while(m1going = true)
            {}
            timer.stop();

2 个答案:

答案 0 :(得分:2)

这是一个1个字符的拼写错误。 while循环永远不会停止,因为您键入了=而不是==。这甚至编译的原因是因为表达式m1going = true返回true的值以及将true分配给m1going。 while循环需要一个布尔值,这就是它所得到的。

这是C / C ++中的常见错误,因为int是一个有效的布尔值。通常,Java会为你捕获这个,并抱怨你不能在while循环中放置int(或其他),但是如果你用boolean犯了这个错误,它就不会被捕获

答案 1 :(得分:2)

while循环的问题是如果它在EDT的上下文中执行,它将停止计时器被触发

相反,摆脱循环并停止Timer

中的ActionListener
            public void actionPerformed(ActionEvent evt) {
                numTimes++;
                //...
                if(numTimes >= 139)
                {
                    numTimes = 0;
                    ((Timer)evt.getSource()).stop();