[英]Why doesn't setText work for JLabel component?
我有一個要隨時更改的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
標簽的默認文本是“操作”
Swing是一個單線程框架,這意味着,如果您執行任何停止該線程的操作,則它將無法響應任何新事件,包括繪畫請求。
基本上, TimeUnit.MILLISECONDS.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(事件調度線程)以獲取更多信息。 這是關於此主題的一個問題: 處理代碼不起作用(線程,draw(),noLoop()和loop())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.