2012-04-07 101 views
4

我在J2ME中遇到了重新啓動問題的問題。我想在構造函數中創建玩家,然後調用playExplosion()來玩它,但它只玩一次。我正在使用Wireless Toolkit。無法在J2ME中播放聲音

Sound類

public class Sound() { 

    private Player playerExplosion; 

    public Sound() throws IOException, MediaException { 
     // Explosion 
     InputStream is = getClass().getResourceAsStream("/explosion.mid"); 
     playerExplosion = Manager.createPlayer(is, "audio/midi"); 
     playerExplosion.realize(); 
     playerExplosion.setLoopCount(1); 
    } 

    public void playExplosion() { 
     try { 
      System.out.println(playerExplosion.getState()); 
      playerExplosion.start(); 
     } catch (MediaException ex) { 
      ex.printStackTrace(); 
     } 
    } 
} 

MyMIDlet類

public class MyMIDlet extends MIDlet() { 

    public Sound sound; 

    public MyMIDlet() { 
     // Init sound object 
     try { 
      sound = new Sound(this); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 

     // Test 
     System.out.println("Start"); 

     for (int i = 0; i < 5; i++) { 
      sound.playExplosion(); 

      // My sound is less than 1 second. 
      try { 
       Thread.sleep(2000); 
      } catch (InterruptedException ex) { 
       ex.printStackTrace(); 
      } 
     } 

     System.out.println("End"); 
    } 
} 

輸出

Start 
200 
300 
300 
300 
300 
End 

對於第一時間,玩家在開始之前的爆炸狀態()是200(實現)。

對於第2,3,4,5次,在開始()之前的playerExplosion狀態是300(PRE​​FETCH)。

目前,我必須在playExplosion()方法中再次創建playerExplosion,但它在真實設備中速度太慢。

回答

0

實現能夠向玩家的資源和耗時的過程havint創建playerExplosion將意味着調用playerExplosion.realize();再次,這就是爲什麼這個過程需要這麼多時間

當你的球員是PREFETCHED State,你需要做的僅僅是調用playerExplosion.start();但它不會再支付,因爲有對的次數一般限制其要

刪除

playerExplosion.setLoopCount(1); 

分你將能夠支付你的文件多次

感謝

:)

2

去除

playerExplosion.setLoopCount(1); 
後嘗試