【发布时间】:2015-09-25 08:40:18
【问题描述】:
我有这个代码:
Thread T=new Thread(new Runnable(){
public void run(){
SwingUtilities.invokeLater(new Runnable(){
public void run(){
for (int i=0;i<18;i++){
int percent=(int)(((i+1)*100)/18);
try {
lblNewLabel.setText("Loading... ("+percent+"%)");
Thread.sleep(1000);
}
catch (Exception e) {
e.printStackTrace();
}
}
}
});
}
});
我的问题是我的标签在启动该线程后不会更改其文本,但会保留旧文本(在此代码标签使用“正在加载...(0%)”文本创建之前)。 有没有办法避免呢?
然后...如果我只在我的 setText 调用中调用 invokeLater,如下所示:
SwingUtilities.invokeLater(new Runnable(){
public void run(){
lblNewLabel.setText("Loading...("+percent+"%)");
}
});
它将被调用 18 次。这是一个好方法吗?还是最好不要调用这么多次invokeLater方法?
谢谢
【问题讨论】:
-
您似乎已将
edt标签用于“事件调度线程”,但实际上并非如此。看看here。我对其进行了编辑以将其从该问题中删除(审核后将可见)。 -
对不起,不知道。
标签: java multithreading user-interface