2014-10-28 44 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())); 
    } 
}