簡體   English   中英

重新驗證並重新繪制-Java Swing

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM