我有一个程序,我需要让按钮闪烁,但是延迟被总结并在错误的时间在代码的开头执行
for(int i = 0; i<3; i++){
btn1.setText(" ");
btn2.setText(" ");
btn3.setText(" ");
Thread.sleep(250);
btn1.setText("X");
btn2.setText("X");
btn3.setText("X");
Thread.sleep(250);
}
执行时,会有 1.5 秒的延迟,然后按钮上的文本才会更改。它变化得非常快,所以你甚至察觉不到变化。对于 GUI,我使用javax.swing. 有没有办法在不创建额外线程的情况下解决这个问题?
问题在于使用 Thread.sleep() 方法,该方法会在指定的时间内阻塞当前线程。在此代码中,它在循环中被调用并阻塞整个线程的执行,包括用户界面。正因为如此,所有的延迟都会在循环执行后立即累积并执行。
除了使用 Thread.sleep(),您还可以使用定时器,定时器会在一段时间后开始更改按钮上的文本。
例如,您可以使用 javax.swing.Timer 类,它允许您在特定时间间隔后运行操作。以下是如何使用计时器重写代码:
此代码创建一个间隔为 250 毫秒的计时器,用于更改按钮上的文本。三次迭代后,计时器停止。这样延迟就不会累积,并且按钮上的文本会定期更改。