Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么';是否为JLabel组件设置文本工作?_Java_Swing_Jlabel_Event Dispatch Thread - Fatal编程技术网

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!我们以前从未见过这样的问题。至少,在这个特殊的时刻,从来没有。在将来尝试搜索..讽刺老兄?嗯,在网上搜索这个对我来说有点困难