Receive MMS images and make album using iamge using j2me
- by Abdul Basit
I am trying to made application which receive MMS images and make a album from them user can view the pictures while running this application. I am facing problem while running application on mobile. while this application is fully working in wireless tookit emulator. Please guide me to fix this problem.`//package hello;
import javax.microedition.midlet.;
import javax.microedition.lcdui.;
import javax.wireless.messaging.*;
import java.io.IOException;
import java.util.Vector;
import javax.microedition.io.Connector;
import javax.microedition.lcdui.Display;
//, ItemStateListener
public class MMSS extends MIDlet implements CommandListener, Runnable, MessageListener  {
    //-----------------------------------Receive MMS ---------------------------
    private Thread mReceiver = null;
    private boolean mEndNow = false;
    private Message msg = null;
    String msgReceived = null;
    private Image[] receivedImage = new Image[5];
    private Command mExitCommand = new Command("Exit", Command.EXIT, 2);
    private Command mRedCommand = new Command("Back", Command.SCREEN, 1);
    private Command mBlueCommand = new Command("Next", Command.SCREEN, 1);
    private Command mPlay = new Command("Play", Command.SCREEN, 1);
protected static final String DEFAULT_IMAGE = "/MMSS_logo.jpg";
//protected static final String DEFAULT_IMAGE = "/wait.png";
private Display mDisplay = null;
//protected ImageItem mColorSquare = null;
protected Image mInitialImage = null;
private String mAppID = "MMSMIDlet";
private TextField imageName = null;
//private Form mForm = null;
private int count = 0;
private int next = 0;
private Integer mMonitor = new Integer(0);
//----------------------------------- End Receive MMS ---------------------------
private boolean midletPaused = false;
private Command exitCommand;
private Command exitCommand1;
private Command backCommand;
private Form form;
private StringItem stringItem;
private ImageItem imageItem;
private Image image1;
private Alert alert;
private List locationList;
private Alert cannotAddLocationAlert;
public MMSS() {
    }
/**
   * Initilizes the application.
   * It is called only once when the MIDlet is started. The method is called before the startMIDlet method.
   */
  private void initialize() {
  }
/**
   * Performs an action assigned to the Mobile Device - MIDlet Started point.
   */
  public void startMIDlet() {
        // write pre-action user code here
      switchDisplayable(null, getForm());
        // write post-action user code here
  }
/**
   * Performs an action assigned to the Mobile Device - MIDlet Resumed point.
   */
  public void resumeMIDlet() {
  }
/**
   * Switches a current displayable in a display. The display instance is taken from getDisplay method. This method is used by all actions in the design for switching displayable.
   * @param alert the Alert which is temporarily set to the display; if null, then nextDisplayable is set immediately
   * @param nextDisplayable the Displayable to be set
   /
  public void switchDisplayable(Alert alert, Displayable nextDisplayable) {//GEN-END:|5-switchDisplayable|0|5-preSwitch
        // write pre-switch user code here
      Display display = getDisplay();//GEN-BEGIN:|5-switchDisplayable|1|5-postSwitch
      if (alert == null) {
          display.setCurrent(nextDisplayable);
      } else {
          display.setCurrent(alert, nextDisplayable);
      }
  } /*
   * Called by a system to indicated that a command has been invoked on a particular displayable.
   * @param command the Command that was invoked
   * @param displayable the Displayable where the command was invoked
   */
  public void commandAction(Command command, Displayable displayable) {
        // write pre-action user code here
      if (displayable == form) {
          if (command == exitCommand) {
                // write pre-action user code here
              exitMIDlet();
                // write post-action user code here
          }
      }
        // write post-action user code here
  }
/**
   * Returns an initiliazed instance of exitCommand component.
   * @return the initialized component instance
   */
  public Command getExitCommand() {
      if (exitCommand == null) {
            // write pre-init user code here
          exitCommand = new Command("Exit", Command.EXIT, 0);
            // write post-init user code here
      }
      return exitCommand;
  }
/**
   * Returns an initiliazed instance of form component.
   * @return the initialized component instance
   */
  public Form getForm() {
      if (form == null) {
            // write pre-init user code here
          form = new Form("Welcome to MMSS", new Item[] { getStringItem(), getImageItem() });
          form.addCommand(getExitCommand());
          form.setCommandListener(this);
            // write post-init user code here
      }
      return form;
  }
/**
   * Returns an initiliazed instance of stringItem component.
   * @return the initialized component instance
   */
  public StringItem getStringItem() {
      if (stringItem == null) {
            // write pre-init user code here
          stringItem = new StringItem("Hello", "Hello, World!");
            // write post-init user code here
      }
      return stringItem;
  }
/**
   * Returns an initiliazed instance of exitCommand1 component.
   * @return the initialized component instance
   /
  public Command getExitCommand1() {
      if (exitCommand1 == null) {
            // write pre-init user code here
          exitCommand1 = new Command("Exit", Command.EXIT, 0);
            // write post-init user code here
      }
      return exitCommand1;
  }
    /*
   * Returns an initiliazed instance of imageItem component.
   * @return the initialized component instance
   */
  public ImageItem getImageItem() {
      if (imageItem == null) {
            // write pre-init user code here
          imageItem = new ImageItem("imageItem", getImage1(), ImageItem.LAYOUT_CENTER | Item.LAYOUT_TOP | Item.LAYOUT_BOTTOM | Item.LAYOUT_VCENTER | Item.LAYOUT_EXPAND | Item.LAYOUT_VEXPAND, "");//GEN-LINE:|26-getter|1|26-postInit
            // write post-init user code here
      }
      return imageItem;
  }
   /**
   * Returns an initiliazed instance of image1 component.
   * @return the initialized component instance
   */
  public Image getImage1() {
      if (image1 == null) {
            // write pre-init user code here
          try {
              image1 = Image.createImage("/B.jpg");
          } catch (java.io.IOException e) {
                e.printStackTrace();
          }
            // write post-init user code here
      }
      return image1;
  }
/**
 * Returns a display instance.
 * @return the display instance.
 */
public Display getDisplay () {
    return Display.getDisplay(this);
}
/**
 * Exits MIDlet.
 */
public void exitMIDlet() {
    switchDisplayable (null, null);
    destroyApp(true);
    notifyDestroyed();
}
/**
 * Called when MIDlet is started.
 * Checks whether the MIDlet have been already started and initialize/starts or resumes the MIDlet.
 */
public void startApp() {
    if (midletPaused) {
        resumeMIDlet ();
    } else {
        initialize ();
        startMIDlet ();
    }
    midletPaused = false;
    ///////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////
    try {
    conn = (MessageConnection) Connector.open("mms://:" + mAppID);
    conn.setMessageListener(this);
    } catch (Exception e) {
    System.out.println("startApp caught: ");
    e.printStackTrace();
    }
    if (conn != null) {
    startReceive();
    }
    ///////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////
}
/**
 * Called when MIDlet is paused.
 */
public void pauseApp() {
    midletPaused = true;
    mEndNow = true;
    try {
        conn.setMessageListener(null);
        conn.close();
    } catch (IOException ex) {
        System.out.println("pausetApp caught: ");
        ex.printStackTrace();
    }
}
/**
 * Called to signal the MIDlet to terminate.
 * @param unconditional if true, then the MIDlet has to be unconditionally terminated and all resources has to be released.
 */
public void destroyApp(boolean unconditional) {
    mEndNow = true;
    try {
        conn.close();
    } catch (IOException ex) {
        System.out.println("destroyApp caught: ");
        ex.printStackTrace();
    }
}
private void startReceive() {
    mEndNow = false;
//---- Start receive thread
        mReceiver = new Thread(this);
        mReceiver.start();
    }
protected MessageConnection conn = null;
protected int mMsgAvail = 0;
// -------------------- Get Next Images ------------------------------------
private void getMessage() {
    synchronized(mMonitor) {
    mMsgAvail++;
    mMonitor.notify();
    }
}
// -------------------- Display Images Thread ------------------------------
public void notifyIncomingMessage(MessageConnection msgConn) {
    if (msgConn == conn)
    getMessage();
}
public void itemStateChanged(Item item) {
    throw new UnsupportedOperationException("Not supported yet.");
}
class SetImage implements Runnable {
    private Image img = null;
    public SetImage(Image inImg) {
    img = inImg;
    }
    public void run() {
    imageItem.setImage(img);
    imageName.setString(Integer.toString(count));
    }
}
public void run() {
    mMsgAvail = 0;
    while (!mEndNow) {
    synchronized(mMonitor) { // Enter monitor
    if (mMsgAvail <= 0)
    try {
       mMonitor.wait();
    } catch (InterruptedException ex) {
    }
    mMsgAvail--;
    }
    try {
    msg = conn.receive();
    if (msg instanceof MultipartMessage) {
    MultipartMessage mpm = (MultipartMessage)msg;
    MessagePart[] parts = mpm.getMessageParts();
    if (parts != null)
    {
        for (int i = 0; i < parts.length; i++) {
        MessagePart mp = parts[i];
        byte[] ba = mp.getContent();
        receivedImage[count] = Image.createImage(ba, 0, ba.length);
    }
    Display.getDisplay(this).callSerially(new SetImage(receivedImage[count]));
             }
         }
      } catch (IOException e) {
          System.out.println("Receive thread caught: ");
       e.printStackTrace();
       }
    count++;
    } // of while
}
}
`