簡體   English   中英

JLabel是否不需要其他線程即可刷新?

[英]JLabel not refreshing without needing additional threads?

我正在制作一個倒數計時器,該計時器每秒刷新一次。

我一輩子都想不通如何刷新JLabel。 我搜索了其他線程,但是它們都涉及使用其他線程。 有沒有辦法使JLabel / Panel刷新? (可能不需要面板)。 如果我刪除了while循環,它會起作用,這只會給我原始時間的計時器String,並且不會減少。 但是,如果我包含while循環,它只會返回一個恆定的黑屏,直到計時器用完為止,然后它會返回原始值。

我應該如何刷新JLabel,以使其在每次遞減時都顯示在GUI上(希望不使用線程。)? (或者每次while循環運行時)

“如果刪除while循環,它將起作用

您正在阻止事件調度線程。

Swing是一個單線程框架,這意味着EDT阻止的任何塊都將阻止處理事件隊列並導致UI掛起。

有關更多詳細信息,請參見Swing中的並發

最簡單的解決方案是使用Swing Timer ,它將允許您安排將在EDT上下文中執行的常規回調。

有關更多詳細信息,請參見如何使用Swing計時器

javax.swing.Timer timer = new javax.swing.Timer(500, new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
        counter++;
        label.setText(count);
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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