2014-11-22 7 views
0

저는 게임을하고 있습니다. 배가 죽었을 때 나는 GIF 폭발을 보여주는 스레드를 만듭니다. 문제는 때때로 폭발이 사라지지 않고 게임이 끝날 때까지 화면에 머물러있게된다는 것입니다."Daemon Thread Image Animator"가 끝나지 않았습니다

디버깅에서 "Daemon Thread Image Animator -0"이 실행 중이고 GIF가 실행되는 것으로 보았습니다. 이것은 폭발의 코드입니다 :

public void run(){ 
    setIcon(new ImageIcon(getClass().getClassLoader().getResource("Imag/explosion.gif"))); 
    Point pos = this.getLocation(); 
    setBounds(pos.x,pos.y); 
    try{ 
     Thread.sleep(500); 
    } 
    catch(Exception e){ 
     e.printStackTrace(); 
    } 
    juego.removeEntidad(this); 

} 

때로는이 문제가 발생하지 않고 수정 방법을 모른다.

+0

너무 말하기가 어렵거나, 스윙과 함께 사용자 Thread.sleep (int)가있는 경우 (더 자세한 정보는 Oracle 튜토리얼 EventDispatchThread를 참조하십시오.) SSCCE/MCVE, short, runnable, compilable – mKorbel

답변

1

나는 게임을하고 있으며 우주선이 죽었을 때 나는 폭발물을 폭발시키는 실을 만듭니다.

예, 스레드를 사용해야하지만 스레드의 GUI 구성 요소를 업데이트하면 안됩니다.

대신 SwingWorker을 사용해야합니다. SwingWorker 사용에 대한 자세한 정보와 예제는 Swing의 동시성에 대한 스윙 튜토리얼의 섹션을 읽으십시오.

+0

안녕하세요, 문제가 있습니다. SwingWorker를 사용하기 위해서는 클래스가 그것을 확장 할 필요가 있습니다. 하지만 나는 JLabel을 확장하고 다중 상속을 할 수 없다. – Joseph

+0

@Mario : 그런 다음 [예제] (http://stackoverflow.com/a/11372932/230513)에 같은 클래스에 레이블 및 작업자가 포함 된 구성을 사용한다. . – trashgod