我无法弄清楚如何让JLabel刷新。我已经搜索了其他线程,但它们都涉及使用其他线程。有没有办法让JLabel / Panel刷新? (小组可能是不必要的)。它可以工作,如果我删除while循环,这将只给我一个原始时间的计时器的字符串,没有减少。但是如果我包含while循环,它只返回一个恒定的空白屏幕,直到计时器用完,然后它返回到原始值。
我应该如何刷新JLabel,以便每次递减时都会显示给GUI(希望不使用线程......)? (或每次while循环运行时)
答案 0 :(得分:3)
“如果我删除了while循环”
您正在阻止事件调度线程。
Swing是一个单线程框架,这意味着EDT将阻止处理事件队列并导致UI挂起的任何块。
有关详细信息,请参阅Concurrency in Swing。
最简单的解决方案是使用Swing Timer
,这将允许您安排将在EDT上下文中执行的常规回调。
有关详细信息,请参阅How to use Swing Timers
javax.swing.Timer timer = new javax.swing.Timer(500, new ActionListener() {
public void actionPerformed(ActionEvent evt) {
counter++;
label.setText(count);
}
});