2011-12-09 3 views
0

나는 방법을 가지고 AnimationThread은 실행 가능한 구현하고 생성자가자바 "화재 및 잊어 버려"스레드

public static void startAnimation() { 
    new AnimationThread().run(); 
} 

: 내가 애플릿의 초기화() 메소드에서 호출 오전

public AnimationThread() { 
    new Thread(this, "Animation Thread"); 
    EventQueue.setAnimationCounter(0); 
    alive = true; 
} 

값을 반환하지 않으므로 중단됩니다. 이 스레드를 시작하고 init() 메소드를 완료하여 애플릿을 시작할 수있는 방법이 있습니까?

감사

+1

스레드()를 시작해야합니다. 'run()'호출은 다른 메소드와 마찬가지로 현재 스레드에서 실행되며 완료 될 때만 리턴합니다. –

답변

4

당신은 약간의 주위에 물건을 이동해야합니다

public AnimationThread() { 
    EventQueue.setAnimationCounter(0); 
    alive = true; 
    new Thread(this, "Animation Thread").start(); 
} 

public static void startAnimation() { 
    new AnimationThread(); 
} 

start() 다른 스레드에서 코드를 실행 마법 Thread 방법이다; AnimationThread 생성자는 호출 한 후에 정상적으로 반환되고 AnimationThread.run()은 새 스레드에서 실행됩니다.

+2

특정 상황에서 생성자에서 새 스레드를 시작하는 것이 문제가 될 수 있습니다 (자세한 내용은 [findbugs] (http://findbugs.sourceforge.net/bugDescriptions.html#SC_START_IN_CTOR) 참조). 이것을 막는 간단한 방법은 AnimationThread 클래스를 최종적으로 만드는 것입니다. – Boris

2

아마 대신 start 방법 run 메서드를 호출해야합니다. start 메서드 만 실제로 새 스레드를 실행합니다.

+0

사실, 'AnimationThread'에는 이름에도 불구하고'start()'메소드가 없습니다. –

관련 문제