2014-10-28 124 views
0

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

+0

请向我们展示堆栈跟踪和相关代码。它太难分辨出空指针在哪里出现,而没有任何该信息。 – 2014-10-28 09:27:30

+1

1)为了更快地获得更好的帮助,请发布[MCVE](http://stackoverflow.com/help/mcve)(最小完整可验证示例)。 2)总是复制/粘贴错误和异常输出! 3)请参阅[什么是堆栈跟踪,以及如何使用它来调试我的应用程序错误?](http://stackoverflow.com/q/3988788/418556)&[什么是空指针异常,以及如何我解决它?](http://stackoverflow.com/q/218384/418556) – 2014-10-28 09:27:56

+0

这里有一些[示例](http://stackoverflow.com/search?tab=votes&q=user%3a230513%20jtogglebutton%20game)使用'JToggleButton'。 – trashgod 2014-10-28 09:45:21

回答

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())); 
    } 
} 
相关问题