Java摆动计时器中断

Java摆动计时器中断,java,swing,timer,Java,Swing,Timer,有没有办法做到这一点?这是我正在制作的模拟器。我希望它能在计数器(numTimes)达到139时停止计时器。我尝试在Action Listener之前初始化计时器,但没有在actionPerformed函数中停止计时器,但它给了我一个错误。我不想使用另一种方法(但如果它工作得更好,那么我完全赞成),而底部的while循环会导致程序冻结?我怎样才能做到这一点 ActionListener taskPerformer = new ActionListener() {

有没有办法做到这一点?这是我正在制作的模拟器。我希望它能在计数器(numTimes)达到139时停止计时器。我尝试在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循环需要一个布尔值,这就是它得到的结果


这是C/C++中常见的错误,因为
int
是有效的布尔值。通常情况下,Java会为您捕捉到这一点,并抱怨您不能将
int
(或任何内容)放入while循环中,但如果您使用
布尔值
,则不会捕捉到这一错误。

这是一个单字符输入错误。while循环永远不会停止,因为您键入的是
=
,而不是
=
。这甚至可以编译,因为表达式
m1going=true
返回
true
的值,并将
true
赋值给
m1going
。while循环需要一个布尔值,这就是它得到的结果


这是C/C++中常见的错误,因为
int
是有效的布尔值。通常情况下,Java会为您捕捉到这一点,并抱怨您不能将
int
(或其他)放入while循环中,但如果您使用
布尔值
犯了这个错误,它就不会被捕捉到。

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

相反,要摆脱循环并停止
ActionListener中的
计时器

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

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

相反,要摆脱循环并停止
ActionListener中的
计时器

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

while循环永远不会停止,因为您键入的是
=
,而不是
=
。这通常不是问题,但这是一个非常非常特殊的情况,当您使用的是boolean.aw垃圾,感谢您指出我更改了它,但它仍然冻结为什么不在ActionListener中停止计时器?我尝试过,但我得到一个错误while循环永远不会停止,因为您键入了
=
而不是
=
。这通常不是问题,但这是一个非常非常特殊的情况,当你拥有的是一个布尔值。啊,废话,谢谢你指出我改变了它,它仍然冻结为什么不停止ActionListener中的计时器?我试过了,但我得到了一个错误哦,哇,我想编程8小时后你会错过一些东西。谢谢。@user3142972当(true){}
没有代码退出循环时,您打算如何退出
?在action listener函数中,如果numTimes达到139,它将更改布尔值,而while true语句基于该布尔值,因此当它更改时,它应该退出,我想在编程了8个小时后,你会错过一些东西。谢谢。@user3142972在没有代码退出循环的情况下,您如何计划退出
while(true){}
?在action listener函数中,如果numTimes达到139,它会更改布尔值,while true语句基于该布尔值,因此当它更改时,它应该退出