2014-10-28 4 views
0

나는 두더지 게임을 만들려고합니다. 스윙을 사용하여 배경을 만들고 클릭 할 때마다 점수를 증가시키는 이벤트 청취자와 함께 두더지 이미지를 추가했지만 표시 여부에 관계없이 설정하는 데 문제가 있습니다. 이 작업을 수행하는 가장 좋은 방법은 부울을 설정/재설정하는 타이머를 사용하는 것이라고 생각했습니다. 그런 다음이 부울을 이미지의 setVisible() 생성자에 전달할 수 있습니다. 이미지를 볼 수있는 기간을 무작위로 선택하는 것이 이상적입니다. 타이머 및 작업 (상속 timertask) 클래스, 부울 다시 설정해야합니다 timer.vis (vis) 호출하여 시도하고 timer.schedule() 작업을 전달하지만 null 포인터 예외가 나타납니다. 내가 잘못된 방향으로가는거야?Timer 클래스를 사용하여 부울을 주기적으로 설정/재설정하는 방법은 무엇입니까? (Java)

+0

스택 트레이스 및 관련 코드를 알려 주시기 바랍니다. 해당 정보없이 nullpointer가 발생하는 곳을 알려주기가 너무 어렵습니다. –

+1

1) 더 나은 도움을 받으려면 [MCVE] (http://stackoverflow.com/help/mcve) (최소한의 완전한 검증 가능한 예)를 게시하십시오. 2) 항상 오류 및 예외 출력을 복사/붙여 넣기하십시오! 3) [스택 트레이스 란 무엇이며 어떻게 응용 프로그램 오류를 디버그 할 수 있습니까?] (http://stackoverflow.com/q/3988788/418556) & [Null Pointer Exception이란 무엇입니까? 나는 그것을 고칠 수 있습니까?] (http://stackoverflow.com/q/218384/418556) –

+0

다음은 일부 [예제]입니다 (http://stackoverflow.com/search?tab=votes&q=user%3a230513%20jtogglebutton%20game). 'JToggleButton'을 사용합니다. – trashgod

답변

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())); 
    } 
} 
관련 문제