package com.lc.media;
/*
* 解决播放音乐文件卡:
* 1.使用Thread
* 2.不能在播放时调用 player.close()/inputStream.close()i
* 而是应该在PlayerListener中调用该函数来关闭资源
*/
import java.io.IOException;
import java.io.InputStream;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.media.Manager;
import javax.microedition.media.Player;
import javax.microedition.media.PlayerListener;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
public class MIDlet3MusicWithThread extends MIDlet implements PlayerListener {
private Form form = new Form("music");
private Command exitCmd = new Command("exit", Command.EXIT, 1);
private Command music1Cmd = new Command("1", Command.SCREEN, 1);
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
// TODO Auto-generated method stub
}
protected void pauseApp() {
// TODO Auto-generated method stub
}
protected void startApp() throws MIDletStateChangeException {
Display.getDisplay(this).setCurrent(form);
form.addCommand(exitCmd);
form.addCommand(music1Cmd);
form.setCommandListener(new CommandListener() {
public void commandAction(Command cmd, Displayable arg1) {
// TODO Auto-generated method stub
if (cmd == exitCmd) {
notifyDestroyed();
} else if (cmd == music1Cmd) {
new Music1Thread().start();
}
}
});
}
public void playerUpdate(Player player, String event, Object eventData) {
// TODO Auto-generated method stub
}
class Music1Thread extends Thread implements PlayerListener {
InputStream is;
Player player;
public void run() {
// TODO Auto-generated method stub
try {
is = this.getClass().getResourceAsStream("/Audio.wav");
// is = this.getClass().getResourceAsStream("/halt.wav");
player = (Player) Manager.createPlayer(is, "audio/x-wav");
player.realize();
System.out.println("-------------");
System.out.println("realize");
form.append("realize");
player.prefetch();
System.out.println("prefetch");
form.append("prefetch");
player.addPlayerListener(this);
System.out.println("addPlayerListner");
form.append("addPlayerListener");
player.start();
System.out.println("start");
form.append("start");
} catch (Exception e) {
// TODO: handle exception
} finally {
/*
* 导致音乐播放卡的原因 if(null != player) { player.close(); } if(null !=
* is) { try { is.close(); } catch (IOException e) { // TODO
* Auto-generated catch block e.printStackTrace(); } }
*/
}
super.run();
}
public void playerUpdate(Player player, String event, Object obj) {
// TODO Auto-generated method stub
if (PlayerListener.END_OF_MEDIA.equals(event)) {
System.out.println("close");
form.append("close");
if(null != player)
{
player.close();
}
if(null != is)
{
try {
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
解决播放音乐文件卡:
* 1.使用Thread
* 2.不能在播放时调用 player.close()/inputStream.close()
而是应该在PlayerListener中调用该函数来关闭资源
player = (Player) Manager.createPlayer(is, "audio/x-wav"); // wav文件
player = (Player) Manager.createPlayer(is, "audio/midi");//mid文件
mid文件的加载速度高于wav