2012-11-22 7 views
0

간단한 스네이크를 프로그래밍하고 싶습니다. 따라서 Scene을 보유 할 수있는 사용자 정의 JPanel을 프로그래밍했습니다. Scene은 무언가를 그렸으며 public void run() 메서드로 스레드 할 수 있으므로 Runnable을 구현합니다.JPanel의 무한 루프

이제 장면을 초기화 할 때 인스턴스의 Thread을 만듭니다.

if (this.getThread() == null) { 
    Thread sceneThread = new Thread(this); 
    this.setThread(sceneThread); 
    this.getThread().run(); 
} else { 
    System.err.println("Scene is already running"); 
} 

그리고 장면이 마침내 시작은 별도의 스레드에서 실행되는 :

// Run thread 
public void run() { 
    try { 
     while (true) { 
      this.update(); 
      this.getGamePanel().sceneShouldRepaint(); 

      Thread.sleep(this.getFps()); 
     } 
    } 
    catch (Exception e) { 
     System.err.println(e); 
    } 
} 

는 어떻게 든이 창문 스레드를 차단하고 있습니다. 더 이상 나타나지 않습니다.

아무도 말해 줄 수 있습니까?

+0

Windows 스레드 코드를 제공 할 수 있습니까? –

+0

스윙 스레드 모델이 이벤트 발송 스레드와 어떻게 작동하는지 읽고 이해 했습니까? http://docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html – Qwerky

+0

@IshanKhanna 방금 JFrame'새 GUI()를 작성합니다. ','GUI'는'JFrame' 서브 클래스입니다 – NSAddict

답변

3

당신은 그래서 당신은 무한 루프에서 자체 스레드 이벤트를 차단하고, 하지run 메소드를 호출 직접 스레드를 시작하지만이다 - 대신 start()를 호출하여 시작을하려고합니다.

플러스 Qingky에 의해 지적 된 스윙 응용 프로그램에서 멀티 스레딩에 대해 읽어보십시오.

+0

아, 언제나처럼, 나는 바보입니다. D – NSAddict

+1

도움을 많이 주셔서 감사합니다. – NSAddict