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.lcdui.List;
import javax.microedition.lcdui.StringItem;
import javax.microedition.media.Manager;
import javax.microedition.media.Player;
import javax.microedition.midlet.MIDlet;
class ThreadedMIDlet extends MIDlet implements CommandListener {
private List list = new List("Press Play", List.IMPLICIT);
private Display display;
private NetworkPlayerManager mgr;
private Command cancel = new Command("Cancel", Command.CANCEL, 1);
public ThreadedMIDlet() {
list.addCommand(new Command("Exit", Command.EXIT, 1));
list.addCommand(new Command("Play", Command.SCREEN, 1));
list.setCommandListener(this);
display = Display.getDisplay(this);
}
public void startApp() {
display.setCurrent(list);
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
public void commandAction(Command cmd, Displayable disp) {
if (cmd.getLabel().equals("Exit")) {
notifyDestroyed();
} else if (cmd.getLabel().equals("Cancel")) {
mgr.cancel();
display.setCurrent(list);
} else {
try {
mgr = new NetworkPlayerManager(display, cancel, this);
Thread runner = new Thread(mgr);
runner.start();
} catch (Exception e) {
System.err.println(e);
}
}
}
}
public class NetworkPlayerManager implements Runnable {
private Display display;
private Form form = new Form("Network Player Manager");
private StringItem msg = new StringItem("Please Wait ... ", null);
private boolean cancel = false;
private Player player = null;
public NetworkPlayerManager(Display display, Command cancelCmd, ThreadedMIDlet parent) {
this.display = display;
form.append(msg);
form.addCommand(cancelCmd);
form.setCommandListener(parent);
}
public void run() {
display.setCurrent(form);
boolean connected = false;
try {
player = Manager.createPlayer("http://www.yoursite.com/s.wav");
player.realize();
connected = true;
} catch (Exception e) {
msg.setText("Failed: " + e.getMessage());
System.err.println(e);
return;
}
if (connected && !cancel)
msg.setText("Connected. Starting playback...");
else {
msg.setText("Unable to connect.");
return;
}
try {
player.start();
} catch (Exception pe) {
msg.setText(pe.getMessage());
}
}
public void cancel() {
cancel = true;
if (player != null)
player.deallocate();
}
}