[英]The text of the Label not changing in Java
我为我的项目创建了一个UI,该UI涉及JLabel(javax.swing),该JLabel需要在每次完成任务时更新(标签的)文本。
我使用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)
{
.
.
}
}
这是代码,假设我需要将相同的命令放在Source A和B中。其中的Thread无法正常工作。
..需要在每次任务完成时更新(标签的)文本。
您对Swing中的Concurency有问题
Swing GUI的所有更新都必须在EDT上完成,即使Whatever.setText()
被声明为线程安全的,但默认情况下, Swing Listener
对Thread.sleep(int)
使用也会冻结Swing GUI,并且任何更改都不会在屏幕
hack将被放置taskLabel.setText(msg);
进入invokeLater()
,然后应在EDT上输出到Swing GUI
看到并使用SwingWorker
作为适当的方法之一,其中方法process
, publish
并done
通知EDT
在将文本添加到JLabel之后,应将文本添加到面板中,如下所示。 label.setText(“ something”); panel.add(标签)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.