gpt4 book ai didi

java - Java中的实时更新秒表?

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

我正在尝试制作一个秒表,它可以不断更新屏幕上的时间。 time 对象是一个应显示耗时的 JLabel。我已经导入并设置了所有内容,但每当单击开始按钮激活计时器时,程序就会卡住。

public class Timing
{
public void Timer()
{
startTime = System.currentTimeMillis();
while(isTiming == true)
{
endTime = System.currentTimeMillis();
elapsedTime = endTime - startTime;
time.setText("" + elapsedTime);
info.validate();
}
endTime = System.currentTimeMillis();
elapsedTime = endTime - startTime;
time.setText("" + elapsedTime);
info.validate();
}
}

这是 Action 监听器部分:

public void actionPerformed(ActionEvent arg0)
{
if(((JButton) arg0.getSource()).getText().equals("Start"))
{
isTiming = true;
new Timing().Timer();
}

最佳答案

您正在尝试在 UI 线程的循环中同步更新标签,该线程与应用 UI 更新的线程相同。通过这样做,您将阻止执行,从而导致您所描述的卡住。

要解决此问题,您可以使用 javax.swing.Timer安排更新,以便它们在同一 UI 线程中运行,但仅在需要时运行,即

timer = new javax.swing.Timer(10, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
...
time.setText("" + elapsedTime);;
}
});

...

public void actionPerformed(ActionEvent arg0)
{
if(((JButton) arg0.getSource()).getText().equals("Start"))
{
isTiming = true;
timer.start();
}
}

关于java - Java中的实时更新秒表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20830834/

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