gpt4 book ai didi

Java - 线程变量保留以前的值

转载 作者:太空宇宙 更新时间:2023-11-04 13:33:06 26 4
gpt4 key购买 nike

我创建了一个简单的计时器类,除非其 timerStop 变量设置为 true,否则它会从 20 倒计时到零,并在每秒后更新 GUI 数组中的 JTextFiled。每次使用计时器时,都会创建一个新的 GameTimer 并将其传递给新的线程。

问题:计时器的第一次运行按预期执行,但后续实例将通过使用前一个计时器的最后一个值(停止的数字)更新 GUI 文本字段来启动,然后按预期从 20 开始倒计时。

我尝试在代码末尾将变量重置回 20 并打印出该值作为测试,该变量确实打印“20”,但当下一个实例运行时,GUI 仍然会更新之前的停止时间。

我使用的是 Netbeans IDE 8.0.2

非常感谢有关我的代码的任何建议和提示,谢谢!

public class GameTimer implements Runnable 
{
private volatile int secondsLeft;
private MultiTextGUI[] guis;
private boolean timerStop;

public GameTimer(MultiTextGUI[] MTguis)
{
secondsLeft = 20;
guis = MTguis;
timerStop = false;
}

public void setTimerStop(boolean stop)
{
timerStop = stop;
}

@Override
public void run()
{
while (secondsLeft > 0 && !timerStop)
{
try
{
Thread.sleep(1000);
}
catch (Exception e)
{
System.out.println("Error: " + e.toString());
}
secondsLeft--;
System.out.println(secondsLeft); //TEST
for (MultiTextGUI gui: guis)
{
if (secondsLeft > 0)
{
if (gui != null)
{
gui.updateTimer(secondsLeft);
}
}
else
{
if (gui != null)
{
gui.setTimerOn(false);
}
}
}

}
secondsLeft = 20;
System.out.println(secondsLeft); //TEST
}
}

主线程:

GameTimer gt = new GameTimer(g);
Thread timerThread = new Thread(gt);
timerThread.start();

//code to show timer in gui
//code for countdownlatch

gt.setTimerStop(true);

最佳答案

在 MultiTextGUI 实例中设置更新值之前,您正在 hibernate 一秒钟。如果显示在此 1 秒周期之前更新,则运行计时器的线程将不会更新显示的值,从而导致显示先前的值。不确定您是否可以在 Thread.sleep(1000) 调用之前设置该值并保留您想要的行为。

关于Java - 线程变量保留以前的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31972983/

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