gpt4 book ai didi

java - JLabel 在不需要额外线程的情况下无法刷新?

转载 作者:行者123 更新时间:2023-12-01 22:29:28 24 4
gpt4 key购买 nike

我正在制作一个每秒刷新一次的倒计时器。

我怎么也想不出如何让 JLabel 刷新。我搜索了其他线程,但它们都涉及使用额外的线程。有没有办法让 JLabel/Panel 刷新? (面板可能是不必要的)。如果我删除 while 循环,它就会起作用,这只会给我一个在原始时间的计时器的静止字符串,没有递减。但如果我包含 while 循环,它只会返回一个恒定的空白屏幕,直到计时器用完,然后它会返回到原始值。

我应该如何刷新 JLabel,以便每次递减时它都会显示在 GUI 上(希望不使用线程..)? (或者每次 while 循环运行时)

最佳答案

"It works if I remove the while loop"

您正在阻塞事件调度线程。

Swing 是一个单线程框架,这意味着 EDT 会阻止处理事件队列并导致 UI 挂起。

参见Concurrency in Swing了解更多详情。

最简单的解决方案是使用 Swing Timer,它允许您安排一个定期回调,该回调将在 EDT 的上下文中执行。

参见How to use Swing Timers了解更多详情

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

关于java - JLabel 在不需要额外线程的情况下无法刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28104168/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com