gpt4 book ai didi

java - AtomicInteger 似乎不适合我

转载 作者:行者123 更新时间:2023-12-01 23:03:18 25 4
gpt4 key购买 nike

我正在尝试为我的 Libgdx 游戏创建一个简单的十秒倒计时器。我创建了一个 timekeep 类,它实现了 runnable 并且可以很好地执行十秒倒计时。然而,我想打印这个 Timer 变量,因为它在我的主游戏玻璃中发生变化,但由于某种原因我不能这样做。我不断收到空指针异常。我认为这可能是同步错误,因为 Render 在自己的线程中运行,而我的 timekeep 运行自己的线程。我尝试过 volatile 变量和同步 gettime 方法,现在尝试原子整数但没有成功。如何从我的 timekeep 类中获取 Timer 变量并在更新时从我​​的主游戏类中打印它?谢谢

这是我的计时类(class)

public class timekeep implements Runnable {
public volatile Boolean TimerRunning = true;
//private int Timer = 10;//I want to print this variable as it counts down
public AtomicInteger Timer = new AtomicInteger(10);
public int Timeleft;


@Override

public void run() {

while (TimerRunning == true) {
System.out.println("Time left" + Timer);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

if (Timer.equals(0)) {

TimerRunning = false;

} else {

Timer.decrementAndGet();

}

}

}

public int getTimer() {
return Timer.get();
}

}

其他主游戏画面类计时计时;

 //constructor
Timekeep = new timekeep();
//on show create the thread
timekeep Timekeep = new timekeep();//inside show method in main game screen class
Thread t1 = new Thread(Timekeep);
t1.start();
//inside the render method
System.out.println(Timekeep.getTimer());//inside render method in main game screenclass

最佳答案

更改

if(Timer.equals(0))

if (getTimer() == 0)

AtomicInteger 不会覆盖 equals 方法。并且您传递的原始 int 0 不等于对象 AtomicInteger。获取int值并与0比较

关于java - AtomicInteger 似乎不适合我,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23188009/

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