有什么办法吗?这是我正在制作的模拟器。我想要它,以便当计数器(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/