有没有办法做到这一点?这是我正在制作的模拟器。我想要它,以便当计数器(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();
答案 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();