我正在尝试为我的Libgdx游戏创建一个简单的十秒倒数计时器。我创建了一个timekeep类,该类实现了可运行的并且可以完成十秒的倒计时。但是,我想打印此Timer变量,因为它在我的主游戏玻璃中发生了变化,但是由于某些原因我无法执行此操作。我不断收到nullpointer异常。我认为这可能是同步错误,因为Render在其自己的线程中运行,而我的计时则在其自己的线程中运行。我尝试了volatile变量和同步的gettime方法,但现在没有成功的原子整数。如何从我的计时类中获取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();
    }

}


其他主游戏画面类
时间保持

 //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,它将不等于Object AtomicInteger。获取int值并与0比较

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

10-10 04:07