如何使用Timer类定期设置/重置布尔值? (JAVA)

时间:2014-10-28 09:24:25

标签: java swing timer nullpointerexception timertask

我正试图创造一个鼹鼠游戏。我使用swing来创建背景并添加鼹鼠图像与事件监听器,每次点击时都会增加分数,但我在设置是否应该可见时遇到问题。我认为最好的方法是使用计时器来设置/重置布尔值。然后可以将此布尔值传递给图像的setVisible()构造函数。随机化图像可见的周期将是理想的。我试图实例化一个计时器和任务(继承timertask)类,调用timer.vis(vis),它应该重置布尔值,然后将任务传递给timer.schedule(),但我得到一个空指针异常。我是以错误的方式解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

好吧,这将随机间隔翻转一下。您可以添加代码以在SwingWorker线程中调用某些内容,具体取决于更改后的位值。

import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.atomic.AtomicBoolean;

public class RandomBitFlip {
    public static void main(String[] args) throws InterruptedException {
        final AtomicBoolean var = new AtomicBoolean(false);
        final Timer timer = new Timer(true);

        randomlyFlip(timer, var);

        // To demonstrate, print the value every 200ms
        for(int x = 0; x < 300; x++) {
            System.out.println(var.get());
            Thread.sleep(200);
        }
    }

    private static void randomlyFlip(final Timer timer, final AtomicBoolean var) {
        final TimerTask task = new TimerTask() {
            @Override
            public void run() {
                var.set(!var.get());
                // Call SwingWorker thread here
                randomlyFlip(timer, var);
            }
        };
        timer.schedule(task, 500 + (long)(1500 * Math.random()));
    }
}