【发布时间】:2012-11-08 06:57:34
【问题描述】:
我正在为我的项目创建一个 UI,其中涉及 JLabel (javax.swing),每次完成该任务时都需要更新(标签的)文本。
我使用 label.setText 更改/更新里面的文本(如下图所示)。但是,大多数时候,标签不会更改文本。我尝试使用 label.UpdateUI() 希望它能解决问题,但它没有。
taskLabel.setText(msg);
有什么想法吗?
if (gatherSamplesValue)
{
if (SourceACheckBox)
{
try
{
Thread setLabelText1 = new Thread(){
public void run(){
taskLabel.setText(msg);
taskLabel.validate();
}
};
msg = "Task : Gathering URLs from Phish Tank. DateTime: " + Main.getCurrentDate();
setLabelText1.start();
SourceA.sourceAMain();
msg="Done with the task : " + Main.getCurrentDate();
Thread setLabelText2 = new Thread(){
public void run(){
taskLabel.setText(msg);
taskLabel.validate();
}
};
setLabelText2.start();
} catch (Exception ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
if (SourceBCheckBox)
{
.
.
}
if (SourceCCheckBox)
{
.
.
}
}
这是代码,假设我需要在源 A 和 B 中放置相同的命令。里面的线程不起作用。
【问题讨论】:
-
1) 为了尽快获得更好的帮助,请发帖 SSCCE。 2) 其余的代码语句很可能阻塞了 EDT。有关详细信息,请参阅Concurrency in Swing。
-
大部分时间 ...对我来说听起来像是线程问题。查阅安德鲁提到的链接
-
@Andrew 代码贴在上面。我尝试按照您所说的那样使用 Thread,但仍然无法正常工作。
-
注意:'代码'!='SSCCE' 请(重新)阅读链接的文章。
标签: java swing concurrency jlabel event-dispatch-thread