[英]Java swing timer break
有什么办法吗? 这是我正在制作的模拟器。 我想要这样,以便当计数器(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循环需要一个布尔值,这就是它的含义。
这是C / C ++中的常见错误,因为int
是有效的布尔值。 通常,Java会为您捕获此错误,并抱怨您无法在while循环中放入int
(或其他任何内容),但是如果您使用boolean
犯此错误,则不会捕获该错误。
while循环的问题是,如果它在EDT的上下文中执行,它将停止计时器的触发
相反,摆脱循环并在ActionListener
停止Timer
public void actionPerformed(ActionEvent evt) {
numTimes++;
//...
if(numTimes >= 139)
{
numTimes = 0;
((Timer)evt.getSource()).stop();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.