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

Java 如何使用Timer类定期设置/重置布尔值?(爪哇),java,swing,timer,nullpointerexception,timertask,Java,Swing,Timer,Nullpointerexception,Timertask,我想创造一个打鼹鼠的游戏。我使用swing创建背景并添加带有事件监听器的鼹鼠图像,每次单击它们时都会增加一个分数,但是我在设置它们是否应该可见时遇到了问题。我认为最好的方法是使用定时器设置/重置布尔值。然后可以将此布尔值传递给映像的setVisible()构造函数。将图像可见的时间随机分配是理想的。我尝试实例化一个timer和task(继承timertask)类,调用timer.vis(vis),它应该重置布尔值,然后将任务传递到timer.schedule()中,但是我得到了一个空指针异常。我

我想创造一个打鼹鼠的游戏。我使用swing创建背景并添加带有事件监听器的鼹鼠图像,每次单击它们时都会增加一个分数,但是我在设置它们是否应该可见时遇到了问题。我认为最好的方法是使用定时器设置/重置布尔值。然后可以将此布尔值传递给映像的setVisible()构造函数。将图像可见的时间随机分配是理想的。我尝试实例化一个timer和task(继承timertask)类,调用timer.vis(vis),它应该重置布尔值,然后将任务传递到timer.schedule()中,但是我得到了一个空指针异常。我是不是走错了方向了?

好吧,这会有一点随机的间隔。您可以添加代码来调用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()));
    }
}
import java.util.Timer;
导入java.util.TimerTask;
导入java.util.concurrent.AtomicBoolean;
公共类随机比特翻转{
公共静态void main(字符串[]args)引发InterruptedException{
最终AtomicBoolean变量=新的AtomicBoolean(false);
最终计时器=新计时器(真);
随机翻转(定时器,变量);
//为了演示,每200ms打印一次值
对于(int x=0;x<300;x++){
System.out.println(变量get());
睡眠(200);
}
}
私有静态void randomlyFlip(最终计时器、最终原子布尔变量){
最终TimerTask任务=新TimerTask(){
@凌驾
公开募捐{
var.set(!var.get());
//在这里调用SwingWorker线程
随机翻转(定时器,变量);
}
};
timer.schedule(任务,500+(长)(1500*Math.random());
}
}

请向我们展示stacktrace和相关代码。如果没有这些信息,很难判断空指针出现在哪里1)为了更快地获得更好的帮助,请发布一个(最小完整可验证示例)。2) 始终复制/粘贴错误和异常输出!3) 请参阅&这里有一些使用
JToggleButton
。使用单个计时器,但随机设置状态