2014-11-22 18 views
0

我正在做一個遊戲,當一艘船已經死亡時,我製作一個顯示GIF爆炸的線程。問題在於有時候爆炸並沒有消失,並且一直停留在屏幕上,直到遊戲結束。「守護線程圖像動畫師」未完成

調試,我看到「守護線程圖像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)與Swing一起使用(Oracle教程EventDispatchThread中的更多信息),以便更快地幫助SSCCE/MCVE,短小,可運行,編譯 – mKorbel 2014-11-22 15:37:26

回答

1

我正在做一個遊戲,當一艘船死了,我做一個線程,顯示一個GIF爆炸。

是的,你需要使用一個線程,但你不應該更新線程中的GUI組件。您可能應該使用SwingWorker。請閱讀Swing中有關併發的Swing教程中的部分,以獲取有關使用SwingWorker的更多信息和示例。

+0

嗨,問題是爲了使用SwingWorker我需要該類擴展它。但是我擴展了JLabel,並且我不能創建一個多繼承 – Joseph 2014-11-22 16:03:21

+0

@Mario:然後使用composition,例如(http://stackoverflow.com/a/11372932/230513),其中標籤&worker包含在同一個類中。 – trashgod 2014-11-22 16:43:54