[英]Revalidate and repaint - Java Swing
我有一個要添加JLabel的JPanel。 然后,我想刪除所有的JLabel並添加一些新的JLabel。
因此,我執行以下操作:
panel.removeAll();panel.repaint();
panel.add(new JLabel("Add something new");
panel.revalidate();
這很好。 當我像這樣啟動新線程時,就會出現我的問題:
panel.removeAll();panel.repaint();
(1)panel.add(new JLabel("Add something new");
panel.revalidate();
//new thread to start - this thread creates new JLabels that should appear under (1)
firstProducer.start();
try {
firstProducer.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
這樣,原始JLabels的輸出仍然可見。 我已經讀到,重新驗證過程是一個長期運行的任務,因此在進行重新驗證時會啟動firstProducer線程,並且會發生沖突。 處理此問題的最佳方法是什么?
問題是firstProducer.join
。 如javadoc中所述
等待該線程死亡。
因此,您將阻止事件調度線程,直到其他Thread
完成為止,因此無法重繪面板或重新驗證面板,並且您將無法在UI中看到更改。
有關更多信息,請查閱Swing並發教程 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.