每当我的计数器达到 4 时,我希望它播放哔声并返回“1”,然后再次计数到 4 播放哔声,依此类推。
我可能不应该把它放在标签中,因为计数器根本不运行! 我没有收到任何错误,但标签上写着;计数器是 4,不计数或任何东西。
你能帮我让这个计数器正常工作吗?我也用过 printline 但那个 也给出了一些错误。
我的计数器代码是这样的:
button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
label1.setVisible(true);
int counter = 1;
while(counter < 5 )
{
label1.setText("counter is " + counter);
counter = counter + 1 ;
}
counter = 1;
tk.beep();
}
});
最佳答案
生成一个新线程来计数、等待和更新 GUI。
您在事件调度线程中完成所有这些工作,这是唯一更新 GUI 的线程。因此,当您设置标签的文本时,它不会在屏幕上更新,直到方法返回并且事件调度线程处理重绘操作。
您需要生成一个新线程来执行此操作,而不是仅仅在一个立即执行的循环中运行它。只需让 actionPerformed
方法产生一个新的 Thread
来处理它。在此线程中循环、计数和更新,在更新之间等待 Thread.sleep
。要更新标签文本,请创建一个新的 Runnable
,它将标签更新为下一个值,并使用 SwingUtilities.invokeLater
将其放在事件调度线程中。保持此线程在后台运行,直到您需要它为止。我建议在每个循环中检查关闭状态 boolean 值,并在它设置为 false 时退出。这样,你可以随时干净利落地关闭线程。或者,如果您希望它倒计时并只发出一次蜂鸣声,您可以让线程在一次迭代计数后结束。
Stack Overflow 上有很多问题详细说明了每个步骤,所以我不会在这里重复这些信息。
关于Java Swing 如何使这个计数器工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5512960/