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