我有一個簡單的JAVA程序,它只是增加int變量並在JLabel中顯示它的值。 我創建一個新的線程適當的(線程安全的)通過調用其內部EventQueue.invokeLater()與運行的類更新的JLabel其運行方法簡單地做EventQueue的緩慢工作
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
label.setText("" + number);
}
});
當我運行程序,符合市場預期標籤的數量開始增長迅速從1到大約5000,但隨後開始減速,我開始看到像100255,173735和235678這樣的標籤更新,以及它們之間的阻塞GUI的大停頓。 但是,當我編譯時不使用EventQueue.invokeLater(),直接調用label.setText("" + number);
一切工作正常和完美,我可以看到我的標籤每個數字如何變化非常快。但我當然意識到在這種情況下,我的方法不是線程安全的。
有什麼問題?在我看來,EventQueue工作緩慢或什麼的。
感謝您的回答!但是,通過合併事件,你的意思是什麼?事件label.setText(「hello」)和label.setText(「goodbye」)被認爲是一樣的嗎?而且我仍然不明白爲什麼在開始時似乎都沒問題,但隨後情況變得更糟,儘管所有過程在開始時都非常相似。只需增加,排隊,更新標籤。 –
如果EventQueue包含太多項目,它可以緩慢工作嗎?有什麼方法可以檢查EventQueue是否包含任何項目? –
合併setText事件與保留給定組件的最近期一樣簡單(IOW,setText總是替換同一組件的未決setText),因爲文本完全替代了之前的內容。 –