我正在尝试为我的Libgdx
游戏创建一个简单的十秒倒数计时器。我已经创建了一个实现runnable的timekeep类,可以做十秒倒计时。但是我想打印这个Timer
变量,因为它在我的主游戏玻璃中发生了变化,但由于某些原因我不能这样做。我一直得到一个nullpointer异常。我认为这可能是一个同步错误,因为Render在自己的线程中运行,而我的timekeep运行自己的线程。我已经尝试了volatile变量和一个同步的gettime方法,现在原子整数没有成功。如何从我的timekeep类中获取Timer
变量并在更新时从我的主游戏类中打印出来?感谢
这是我的计时课
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();
}
}
其他主要游戏画面类 timekeep Timekeep;
//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
答案 0 :(得分:3)
更改
if(Timer.equals(0))
到
if (getTimer() == 0)
AtomicInteger不会覆盖equals方法。并且您正在传递原始int 0,它不等于Object AtomicInteger。获取int值并与0进行比较