Java Swing 计时器中断

标签 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();

最佳答案

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

这是 C/C++ 中的常见错误,因为 int 是有效的 boolean 值。通常,Java 会为您捕捉到这一点,并提示您不能在 while 循环中放入 int(或其他),但是如果您使用 boolean 犯了这个错误>,它没有被捕获。

关于Java Swing 计时器中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20864431/

相关文章:

java - 如何让用户只选择特定座位?

java - 无法在 BorderLayout 中垂直对齐水平 JSeparator

ios - 在 Swift 中暂停和恢复定时器

java - 来自网页的蓝牙

java - 正则表达式不给出溢出错误

java - 提升和重新排序是一回事吗?

go - 如何在 X 小时后有效地调用函数?

java - Android:Realm了解LinkingObjects

java - 单击 JMenuItem 时执行操作?

c - 向预分频硬件定时器添加偏移量时,如何避免这种差一错误?