Java JLabel不刷新而不需要额外线程?
我正在制作一个倒数计时器,它每秒钟刷新一次 我一辈子都不知道如何让JLabel刷新。我搜索了其他线程,但它们都涉及使用其他线程。是否有办法使JLabel/面板刷新?(可能不需要面板)。如果我移除while循环,它会在原始时间为我提供一个静止的计时器字符串,并且不会减少。但是如果我包含while循环,它只会返回一个恒定的空白屏幕,直到计时器用完,然后返回到原始值 我应该如何刷新JLabel,使其在每次递减时都显示在GUI上(希望不使用线程..)?(或每次while循环运行时) “如果我删除while循环,它会工作” 您正在阻止事件调度线程 Swing是一个单线程框架,这意味着EDT阻止处理事件队列并导致UI挂起的任何内容 有关更多详细信息,请参阅 最简单的解决方案是使用SwingJava JLabel不刷新而不需要额外线程?,java,swing,jlabel,event-dispatch-thread,actionevent,Java,Swing,Jlabel,Event Dispatch Thread,Actionevent,我正在制作一个倒数计时器,它每秒钟刷新一次 我一辈子都不知道如何让JLabel刷新。我搜索了其他线程,但它们都涉及使用其他线程。是否有办法使JLabel/面板刷新?(可能不需要面板)。如果我移除while循环,它会在原始时间为我提供一个静止的计时器字符串,并且不会减少。但是如果我包含while循环,它只会返回一个恒定的空白屏幕,直到计时器用完,然后返回到原始值 我应该如何刷新JLabel,使其在每次递减时都显示在GUI上(希望不使用线程..)?(或每次while循环运行时) “如果我删除whil
计时器,这将允许您计划一个定期回调,该回调将在EDT上下文中执行
有关更多详细信息,请参阅
javax.swing.Timer timer = new javax.swing.Timer(500, new ActionListener() {
public void actionPerformed(ActionEvent evt) {
counter++;
label.setText(count);
}
});
“如果我删除while循环,它会工作”
您正在阻止事件调度线程
Swing是一个单线程框架,这意味着EDT阻止处理事件队列并导致UI挂起的任何内容
有关更多详细信息,请参阅
最简单的解决方案是使用Swing计时器,这将允许您计划一个定期回调,该回调将在EDT上下文中执行
有关更多详细信息,请参阅
javax.swing.Timer timer = new javax.swing.Timer(500, new ActionListener() {
public void actionPerformed(ActionEvent evt) {
counter++;
label.setText(count);
}
});
“如果我删除while循环,它会工作”
您正在阻止事件调度线程
Swing是一个单线程框架,这意味着EDT阻止处理事件队列并导致UI挂起的任何内容
有关更多详细信息,请参阅
最简单的解决方案是使用Swing计时器,这将允许您计划一个定期回调,该回调将在EDT上下文中执行
有关更多详细信息,请参阅
javax.swing.Timer timer = new javax.swing.Timer(500, new ActionListener() {
public void actionPerformed(ActionEvent evt) {
counter++;
label.setText(count);
}
});
“如果我删除while循环,它会工作”
您正在阻止事件调度线程
Swing是一个单线程框架,这意味着EDT阻止处理事件队列并导致UI挂起的任何内容
有关更多详细信息,请参阅
最简单的解决方案是使用Swing计时器,这将允许您计划一个定期回调,该回调将在EDT上下文中执行
有关更多详细信息,请参阅
javax.swing.Timer timer = new javax.swing.Timer(500, new ActionListener() {
public void actionPerformed(ActionEvent evt) {
counter++;
label.setText(count);
}
});
为了确保,500是以毫秒为单位的?为了确保,500是以毫秒为单位的?为了确保,500是以毫秒为单位的?为了确保,500是以毫秒为单位的?