Java 为什么';是否为JLabel组件设置文本工作?
我有一个Java 为什么';是否为JLabel组件设置文本工作?,java,swing,jlabel,event-dispatch-thread,Java,Swing,Jlabel,Event Dispatch Thread,我有一个JLabel,我想立即更改它,下面是我为此编写的代码: infoLabel.setText("Added"); try { TimeUnit.MILLISECONDS.sleep(300); } catch(InterruptedException ex) { } infoLabel.setText("Action"); //funny part is when I comment this line it works 我的标签默认文本是“Action”Swing是单线程框架,
JLabel
,我想立即更改它,下面是我为此编写的代码:
infoLabel.setText("Added");
try {
TimeUnit.MILLISECONDS.sleep(300);
}
catch(InterruptedException ex)
{
}
infoLabel.setText("Action"); //funny part is when I comment this line it works
我的标签默认文本是“Action”Swing是单线程框架,这意味着,如果您执行任何操作来停止此线程,那么它将无法响应任何新事件,包括绘制请求 基本上,
TimeUnit.millises.sleep(300)
会导致事件调度线程进入睡眠状态,从而阻止它处理任何新的绘制请求(以及其他事情)
相反,您应该使用javax.swing.Timer
看看
infoLabel.setText("Added");
Timer timer = new Timer(300, new ActionListener() {
public void actionPerformed(ActionEvent evt) {
infoLabel.setText("Action");
}
});
timer.setRepeats(false);
timer.start();
注意,300毫秒是非常短的时间,您可能希望从一个稍大的值开始,比如2000,也就是2秒;) 您正在休眠Swing事件线程,使整个GUI处于休眠状态。不要那样做。请改用Swing计时器。您的应用程序在单个线程上运行,因此,当您睡眠该线程时,您会阻止它进行任何GUI更新。您确定操作正确吗?通过在GUI线程中执行所有操作(包括睡眠),它将始终处于繁忙状态,并且永远不会返回Java以便重新绘制GUI
有关详细信息,请搜索EDT(事件调度线程)。关于这个问题,这里有一个问题:Wow!我们以前从未见过这样的问题。至少,在这个特殊的时刻,从来没有。在将来尝试搜索..讽刺老兄?嗯,在网上搜索这个对我来说有点困难